github.com/google/go-github/v42@v42.0.0/github/gists.go (about) 1 // Copyright 2013 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "fmt" 11 "time" 12 ) 13 14 // GistsService handles communication with the Gist related 15 // methods of the GitHub API. 16 // 17 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/ 18 type GistsService service 19 20 // Gist represents a GitHub's gist. 21 type Gist struct { 22 ID *string `json:"id,omitempty"` 23 Description *string `json:"description,omitempty"` 24 Public *bool `json:"public,omitempty"` 25 Owner *User `json:"owner,omitempty"` 26 Files map[GistFilename]GistFile `json:"files,omitempty"` 27 Comments *int `json:"comments,omitempty"` 28 HTMLURL *string `json:"html_url,omitempty"` 29 GitPullURL *string `json:"git_pull_url,omitempty"` 30 GitPushURL *string `json:"git_push_url,omitempty"` 31 CreatedAt *time.Time `json:"created_at,omitempty"` 32 UpdatedAt *time.Time `json:"updated_at,omitempty"` 33 NodeID *string `json:"node_id,omitempty"` 34 } 35 36 func (g Gist) String() string { 37 return Stringify(g) 38 } 39 40 // GistFilename represents filename on a gist. 41 type GistFilename string 42 43 // GistFile represents a file on a gist. 44 type GistFile struct { 45 Size *int `json:"size,omitempty"` 46 Filename *string `json:"filename,omitempty"` 47 Language *string `json:"language,omitempty"` 48 Type *string `json:"type,omitempty"` 49 RawURL *string `json:"raw_url,omitempty"` 50 Content *string `json:"content,omitempty"` 51 } 52 53 func (g GistFile) String() string { 54 return Stringify(g) 55 } 56 57 // GistCommit represents a commit on a gist. 58 type GistCommit struct { 59 URL *string `json:"url,omitempty"` 60 Version *string `json:"version,omitempty"` 61 User *User `json:"user,omitempty"` 62 ChangeStatus *CommitStats `json:"change_status,omitempty"` 63 CommittedAt *Timestamp `json:"committed_at,omitempty"` 64 NodeID *string `json:"node_id,omitempty"` 65 } 66 67 func (gc GistCommit) String() string { 68 return Stringify(gc) 69 } 70 71 // GistFork represents a fork of a gist. 72 type GistFork struct { 73 URL *string `json:"url,omitempty"` 74 User *User `json:"user,omitempty"` 75 ID *string `json:"id,omitempty"` 76 CreatedAt *Timestamp `json:"created_at,omitempty"` 77 UpdatedAt *Timestamp `json:"updated_at,omitempty"` 78 NodeID *string `json:"node_id,omitempty"` 79 } 80 81 func (gf GistFork) String() string { 82 return Stringify(gf) 83 } 84 85 // GistListOptions specifies the optional parameters to the 86 // GistsService.List, GistsService.ListAll, and GistsService.ListStarred methods. 87 type GistListOptions struct { 88 // Since filters Gists by time. 89 Since time.Time `url:"since,omitempty"` 90 91 ListOptions 92 } 93 94 // List gists for a user. Passing the empty string will list 95 // all public gists if called anonymously. However, if the call 96 // is authenticated, it will returns all gists for the authenticated 97 // user. 98 // 99 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-gists-for-the-authenticated-user 100 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-gists-for-a-user 101 func (s *GistsService) List(ctx context.Context, user string, opts *GistListOptions) ([]*Gist, *Response, error) { 102 var u string 103 if user != "" { 104 u = fmt.Sprintf("users/%v/gists", user) 105 } else { 106 u = "gists" 107 } 108 u, err := addOptions(u, opts) 109 if err != nil { 110 return nil, nil, err 111 } 112 113 req, err := s.client.NewRequest("GET", u, nil) 114 if err != nil { 115 return nil, nil, err 116 } 117 118 var gists []*Gist 119 resp, err := s.client.Do(ctx, req, &gists) 120 if err != nil { 121 return nil, resp, err 122 } 123 124 return gists, resp, nil 125 } 126 127 // ListAll lists all public gists. 128 // 129 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-public-gists 130 func (s *GistsService) ListAll(ctx context.Context, opts *GistListOptions) ([]*Gist, *Response, error) { 131 u, err := addOptions("gists/public", opts) 132 if err != nil { 133 return nil, nil, err 134 } 135 136 req, err := s.client.NewRequest("GET", u, nil) 137 if err != nil { 138 return nil, nil, err 139 } 140 141 var gists []*Gist 142 resp, err := s.client.Do(ctx, req, &gists) 143 if err != nil { 144 return nil, resp, err 145 } 146 147 return gists, resp, nil 148 } 149 150 // ListStarred lists starred gists of authenticated user. 151 // 152 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-starred-gists 153 func (s *GistsService) ListStarred(ctx context.Context, opts *GistListOptions) ([]*Gist, *Response, error) { 154 u, err := addOptions("gists/starred", opts) 155 if err != nil { 156 return nil, nil, err 157 } 158 159 req, err := s.client.NewRequest("GET", u, nil) 160 if err != nil { 161 return nil, nil, err 162 } 163 164 var gists []*Gist 165 resp, err := s.client.Do(ctx, req, &gists) 166 if err != nil { 167 return nil, resp, err 168 } 169 170 return gists, resp, nil 171 } 172 173 // Get a single gist. 174 // 175 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#get-a-gist 176 func (s *GistsService) Get(ctx context.Context, id string) (*Gist, *Response, error) { 177 u := fmt.Sprintf("gists/%v", id) 178 req, err := s.client.NewRequest("GET", u, nil) 179 if err != nil { 180 return nil, nil, err 181 } 182 183 gist := new(Gist) 184 resp, err := s.client.Do(ctx, req, gist) 185 if err != nil { 186 return nil, resp, err 187 } 188 189 return gist, resp, nil 190 } 191 192 // GetRevision gets a specific revision of a gist. 193 // 194 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#get-a-gist-revision 195 func (s *GistsService) GetRevision(ctx context.Context, id, sha string) (*Gist, *Response, error) { 196 u := fmt.Sprintf("gists/%v/%v", id, sha) 197 req, err := s.client.NewRequest("GET", u, nil) 198 if err != nil { 199 return nil, nil, err 200 } 201 202 gist := new(Gist) 203 resp, err := s.client.Do(ctx, req, gist) 204 if err != nil { 205 return nil, resp, err 206 } 207 208 return gist, resp, nil 209 } 210 211 // Create a gist for authenticated user. 212 // 213 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#create-a-gist 214 func (s *GistsService) Create(ctx context.Context, gist *Gist) (*Gist, *Response, error) { 215 u := "gists" 216 req, err := s.client.NewRequest("POST", u, gist) 217 if err != nil { 218 return nil, nil, err 219 } 220 221 g := new(Gist) 222 resp, err := s.client.Do(ctx, req, g) 223 if err != nil { 224 return nil, resp, err 225 } 226 227 return g, resp, nil 228 } 229 230 // Edit a gist. 231 // 232 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#update-a-gist 233 func (s *GistsService) Edit(ctx context.Context, id string, gist *Gist) (*Gist, *Response, error) { 234 u := fmt.Sprintf("gists/%v", id) 235 req, err := s.client.NewRequest("PATCH", u, gist) 236 if err != nil { 237 return nil, nil, err 238 } 239 240 g := new(Gist) 241 resp, err := s.client.Do(ctx, req, g) 242 if err != nil { 243 return nil, resp, err 244 } 245 246 return g, resp, nil 247 } 248 249 // ListCommits lists commits of a gist. 250 // 251 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-gist-commits 252 func (s *GistsService) ListCommits(ctx context.Context, id string, opts *ListOptions) ([]*GistCommit, *Response, error) { 253 u := fmt.Sprintf("gists/%v/commits", id) 254 u, err := addOptions(u, opts) 255 if err != nil { 256 return nil, nil, err 257 } 258 259 req, err := s.client.NewRequest("GET", u, nil) 260 if err != nil { 261 return nil, nil, err 262 } 263 264 var gistCommits []*GistCommit 265 resp, err := s.client.Do(ctx, req, &gistCommits) 266 if err != nil { 267 return nil, resp, err 268 } 269 270 return gistCommits, resp, nil 271 } 272 273 // Delete a gist. 274 // 275 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#delete-a-gist 276 func (s *GistsService) Delete(ctx context.Context, id string) (*Response, error) { 277 u := fmt.Sprintf("gists/%v", id) 278 req, err := s.client.NewRequest("DELETE", u, nil) 279 if err != nil { 280 return nil, err 281 } 282 return s.client.Do(ctx, req, nil) 283 } 284 285 // Star a gist on behalf of authenticated user. 286 // 287 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#star-a-gist 288 func (s *GistsService) Star(ctx context.Context, id string) (*Response, error) { 289 u := fmt.Sprintf("gists/%v/star", id) 290 req, err := s.client.NewRequest("PUT", u, nil) 291 if err != nil { 292 return nil, err 293 } 294 return s.client.Do(ctx, req, nil) 295 } 296 297 // Unstar a gist on a behalf of authenticated user. 298 // 299 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#unstar-a-gist 300 func (s *GistsService) Unstar(ctx context.Context, id string) (*Response, error) { 301 u := fmt.Sprintf("gists/%v/star", id) 302 req, err := s.client.NewRequest("DELETE", u, nil) 303 if err != nil { 304 return nil, err 305 } 306 return s.client.Do(ctx, req, nil) 307 } 308 309 // IsStarred checks if a gist is starred by authenticated user. 310 // 311 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#check-if-a-gist-is-starred 312 func (s *GistsService) IsStarred(ctx context.Context, id string) (bool, *Response, error) { 313 u := fmt.Sprintf("gists/%v/star", id) 314 req, err := s.client.NewRequest("GET", u, nil) 315 if err != nil { 316 return false, nil, err 317 } 318 resp, err := s.client.Do(ctx, req, nil) 319 starred, err := parseBoolResponse(err) 320 return starred, resp, err 321 } 322 323 // Fork a gist. 324 // 325 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#fork-a-gist 326 func (s *GistsService) Fork(ctx context.Context, id string) (*Gist, *Response, error) { 327 u := fmt.Sprintf("gists/%v/forks", id) 328 req, err := s.client.NewRequest("POST", u, nil) 329 if err != nil { 330 return nil, nil, err 331 } 332 333 g := new(Gist) 334 resp, err := s.client.Do(ctx, req, g) 335 if err != nil { 336 return nil, resp, err 337 } 338 339 return g, resp, nil 340 } 341 342 // ListForks lists forks of a gist. 343 // 344 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-gist-forks 345 func (s *GistsService) ListForks(ctx context.Context, id string, opts *ListOptions) ([]*GistFork, *Response, error) { 346 u := fmt.Sprintf("gists/%v/forks", id) 347 u, err := addOptions(u, opts) 348 if err != nil { 349 return nil, nil, err 350 } 351 352 req, err := s.client.NewRequest("GET", u, nil) 353 if err != nil { 354 return nil, nil, err 355 } 356 357 var gistForks []*GistFork 358 resp, err := s.client.Do(ctx, req, &gistForks) 359 if err != nil { 360 return nil, resp, err 361 } 362 363 return gistForks, resp, nil 364 }