Go client for the Write.as API https://developers.write.as
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.5 KiB

  1. package writeas
  2. import (
  3. "fmt"
  4. "net/http"
  5. )
  6. type (
  7. // Collection represents a collection of posts. Blogs are a type of collection
  8. // on Write.as.
  9. Collection struct {
  10. Alias string `json:"alias"`
  11. Title string `json:"title"`
  12. Description string `json:"description"`
  13. StyleSheet string `json:"style_sheet"`
  14. Private bool `json:"private"`
  15. Views int64 `json:"views"`
  16. Domain string `json:"domain,omitempty"`
  17. Email string `json:"email,omitempty"`
  18. TotalPosts int `json:"total_posts"`
  19. }
  20. // CollectionParams holds values for creating a collection.
  21. CollectionParams struct {
  22. Alias string `json:"alias"`
  23. Title string `json:"title"`
  24. }
  25. )
  26. // GetCollection retrieves a collection, returning the Collection and any error
  27. // (in user-friendly form) that occurs. See
  28. // https://developer.write.as/docs/api/#retrieve-a-collection
  29. func (c *Client) GetCollection(alias string) (*Collection, error) {
  30. coll := &Collection{}
  31. env, err := c.get(fmt.Sprintf("/collections/%s", alias), coll)
  32. if err != nil {
  33. return nil, err
  34. }
  35. var ok bool
  36. if coll, ok = env.Data.(*Collection); !ok {
  37. return nil, fmt.Errorf("Wrong data returned from API.")
  38. }
  39. status := env.Code
  40. if status == http.StatusOK {
  41. return coll, nil
  42. } else if status == http.StatusNotFound {
  43. return nil, fmt.Errorf("Collection not found.")
  44. } else {
  45. return nil, fmt.Errorf("Problem getting collection: %s. %v\n", status, err)
  46. }
  47. return coll, nil
  48. }
  49. // CreateCollection creates a new collection, returning a user-friendly error
  50. // if one comes up. Requires a Write.as subscription. See
  51. // https://developer.write.as/docs/api/#create-a-collection
  52. func (c *Client) CreateCollection(sp *CollectionParams) (*Collection, error) {
  53. p := &Collection{}
  54. env, err := c.post("/collections", sp, p)
  55. if err != nil {
  56. return nil, err
  57. }
  58. var ok bool
  59. if p, ok = env.Data.(*Collection); !ok {
  60. return nil, fmt.Errorf("Wrong data returned from API.")
  61. }
  62. status := env.Code
  63. if status == http.StatusCreated {
  64. return p, nil
  65. } else if status == http.StatusBadRequest {
  66. return nil, fmt.Errorf("Bad request: %s", env.ErrorMessage)
  67. } else if status == http.StatusForbidden {
  68. return nil, fmt.Errorf("Casual or Pro user required.")
  69. } else if status == http.StatusConflict {
  70. return nil, fmt.Errorf("Collection name is already taken.")
  71. } else if status == http.StatusPreconditionFailed {
  72. return nil, fmt.Errorf("Reached max collection quota.")
  73. }
  74. return nil, fmt.Errorf("Problem getting post: %s. %v\n", status, err)
  75. }