issue_milestone.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package gitote
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "time"
  7. )
  8. type Milestone struct {
  9. ID int64 `json:"id"`
  10. Title string `json:"title"`
  11. Description string `json:"description"`
  12. State StateType `json:"state"`
  13. OpenIssues int `json:"open_issues"`
  14. ClosedIssues int `json:"closed_issues"`
  15. Closed *time.Time `json:"closed_at"`
  16. Deadline *time.Time `json:"due_on"`
  17. }
  18. func (c *Client) ListRepoMilestones(owner, repo string) ([]*Milestone, error) {
  19. milestones := make([]*Milestone, 0, 10)
  20. return milestones, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/milestones", owner, repo), nil, nil, &milestones)
  21. }
  22. func (c *Client) GetMilestone(owner, repo string, id int64) (*Milestone, error) {
  23. milestone := new(Milestone)
  24. return milestone, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), nil, nil, milestone)
  25. }
  26. type CreateMilestoneOption struct {
  27. Title string `json:"title"`
  28. Description string `json:"description"`
  29. Deadline *time.Time `json:"due_on"`
  30. }
  31. func (c *Client) CreateMilestone(owner, repo string, opt CreateMilestoneOption) (*Milestone, error) {
  32. body, err := json.Marshal(&opt)
  33. if err != nil {
  34. return nil, err
  35. }
  36. milestone := new(Milestone)
  37. return milestone, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/milestones", owner, repo), jsonHeader, bytes.NewReader(body), milestone)
  38. }
  39. type EditMilestoneOption struct {
  40. Title string `json:"title"`
  41. Description *string `json:"description"`
  42. State *string `json:"state"`
  43. Deadline *time.Time `json:"due_on"`
  44. }
  45. func (c *Client) EditMilestone(owner, repo string, id int64, opt EditMilestoneOption) (*Milestone, error) {
  46. body, err := json.Marshal(&opt)
  47. if err != nil {
  48. return nil, err
  49. }
  50. milestone := new(Milestone)
  51. return milestone, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), jsonHeader, bytes.NewReader(body), milestone)
  52. }
  53. func (c *Client) DeleteMilestone(owner, repo string, id int64) error {
  54. _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), nil, nil)
  55. return err
  56. }