diff --git a/reddit/account.go b/reddit/account.go index f687a5a..58449cb 100644 --- a/reddit/account.go +++ b/reddit/account.go @@ -274,7 +274,7 @@ func (s *AccountService) Settings(ctx context.Context) (*Settings, *Response, er func (s *AccountService) UpdateSettings(ctx context.Context, settings *Settings) (*Settings, *Response, error) { path := "api/v1/me/prefs" - req, err := s.client.NewRequest(http.MethodPatch, path, settings) + req, err := s.client.NewJSONRequest(http.MethodPatch, path, settings) if err != nil { return nil, nil, err } @@ -391,7 +391,7 @@ func (s *AccountService) AddTrusted(ctx context.Context, username string) (*Resp form.Set("api_type", "json") form.Set("name", username) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -407,7 +407,7 @@ func (s *AccountService) RemoveTrusted(ctx context.Context, username string) (*R form := url.Values{} form.Set("name", username) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/collection.go b/reddit/collection.go index 736d2e5..64ce35b 100644 --- a/reddit/collection.go +++ b/reddit/collection.go @@ -116,7 +116,7 @@ func (s *CollectionService) Create(ctx context.Context, createRequest *Collectio return nil, nil, err } - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -137,7 +137,7 @@ func (s *CollectionService) Delete(ctx context.Context, id string) (*Response, e form := url.Values{} form.Set("collection_id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -153,7 +153,7 @@ func (s *CollectionService) AddPost(ctx context.Context, postID, collectionID st form.Set("link_fullname", postID) form.Set("collection_id", collectionID) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -169,7 +169,7 @@ func (s *CollectionService) RemovePost(ctx context.Context, postID, collectionID form.Set("link_fullname", postID) form.Set("collection_id", collectionID) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -185,7 +185,7 @@ func (s *CollectionService) ReorderPosts(ctx context.Context, collectionID strin form.Set("collection_id", collectionID) form.Set("link_ids", strings.Join(postIDs, ",")) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -201,7 +201,7 @@ func (s *CollectionService) UpdateTitle(ctx context.Context, id string, title st form.Set("collection_id", id) form.Set("title", title) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -217,7 +217,7 @@ func (s *CollectionService) UpdateDescription(ctx context.Context, id string, de form.Set("collection_id", id) form.Set("description", description) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -233,7 +233,7 @@ func (s *CollectionService) UpdateLayoutTimeline(ctx context.Context, id string) form.Set("collection_id", id) form.Set("display_layout", "TIMELINE") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -249,7 +249,7 @@ func (s *CollectionService) UpdateLayoutGallery(ctx context.Context, id string) form.Set("collection_id", id) form.Set("display_layout", "GALLERY") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -265,7 +265,7 @@ func (s *CollectionService) Follow(ctx context.Context, id string) (*Response, e form.Set("collection_id", id) form.Set("follow", "true") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -281,7 +281,7 @@ func (s *CollectionService) Unfollow(ctx context.Context, id string) (*Response, form.Set("collection_id", id) form.Set("follow", "false") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/comment.go b/reddit/comment.go index a351b19..b431189 100644 --- a/reddit/comment.go +++ b/reddit/comment.go @@ -28,7 +28,7 @@ func (s *CommentService) Submit(ctx context.Context, parentID string, text strin form.Set("parent", parentID) form.Set("text", text) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -52,7 +52,7 @@ func (s *CommentService) Edit(ctx context.Context, id string, text string) (*Com form.Set("thing_id", id) form.Set("text", text) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -88,7 +88,7 @@ func (s *CommentService) LoadMoreReplies(ctx context.Context, comment *Comment) // This was originally a GET, but with POST you can send a bigger payload // since it's in the body and not the URI. - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/emoji.go b/reddit/emoji.go index 81d2386..f01a99c 100644 --- a/reddit/emoji.go +++ b/reddit/emoji.go @@ -104,12 +104,10 @@ func (s *EmojiService) Get(ctx context.Context, subreddit string) ([]*Emoji, []* // Delete the emoji from the subreddit. func (s *EmojiService) Delete(ctx context.Context, subreddit string, emoji string) (*Response, error) { path := fmt.Sprintf("api/v1/%s/emoji/%s", subreddit, emoji) - req, err := s.client.NewRequest(http.MethodDelete, path, nil) if err != nil { return nil, err } - return s.client.Do(ctx, req, nil) } @@ -122,7 +120,7 @@ func (s *EmojiService) SetSize(ctx context.Context, subreddit string, height, wi form.Set("height", fmt.Sprint(height)) form.Set("width", fmt.Sprint(width)) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -133,12 +131,10 @@ func (s *EmojiService) SetSize(ctx context.Context, subreddit string, height, wi // DisableCustomSize disables the custom emoji size in the subreddit. func (s *EmojiService) DisableCustomSize(ctx context.Context, subreddit string) (*Response, error) { path := fmt.Sprintf("api/v1/%s/emoji_custom_size", subreddit) - - req, err := s.client.NewRequestWithForm(http.MethodPost, path, nil) + req, err := s.client.NewRequest(http.MethodPost, path, nil) if err != nil { return nil, err } - return s.client.Do(ctx, req, nil) } @@ -152,7 +148,7 @@ func (s *EmojiService) lease(ctx context.Context, subreddit, imagePath string) ( form.Set("mimetype", "image/png") } - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return "", nil, nil, err } @@ -191,7 +187,7 @@ func (s *EmojiService) upload(ctx context.Context, subreddit string, createReque } form.Set("s3_key", awsKey) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -276,7 +272,7 @@ func (s *EmojiService) Update(ctx context.Context, subreddit string, updateReque return nil, err } - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/flair.go b/reddit/flair.go index 86c35db..f427a44 100644 --- a/reddit/flair.go +++ b/reddit/flair.go @@ -172,7 +172,7 @@ func (s *FlairService) Configure(ctx context.Context, subreddit string, request } form.Set("api_type", "json") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -188,7 +188,7 @@ func (s *FlairService) Enable(ctx context.Context, subreddit string) (*Response, form.Set("api_type", "json") form.Set("flair_enabled", "true") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -204,7 +204,7 @@ func (s *FlairService) Disable(ctx context.Context, subreddit string) (*Response form.Set("api_type", "json") form.Set("flair_enabled", "false") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -228,7 +228,7 @@ func (s *FlairService) UpsertUserTemplate(ctx context.Context, subreddit string, form.Set("api_type", "json") form.Set("flair_type", "USER_FLAIR") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -258,7 +258,7 @@ func (s *FlairService) UpsertPostTemplate(ctx context.Context, subreddit string, form.Set("api_type", "json") form.Set("flair_type", "LINK_FLAIR") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -280,7 +280,7 @@ func (s *FlairService) Delete(ctx context.Context, subreddit, username string) ( form.Set("api_type", "json") form.Set("name", username) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -296,7 +296,7 @@ func (s *FlairService) DeleteTemplate(ctx context.Context, subreddit, id string) form.Set("api_type", "json") form.Set("flair_template_id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -312,7 +312,7 @@ func (s *FlairService) DeleteAllUserTemplates(ctx context.Context, subreddit str form.Set("api_type", "json") form.Set("flair_type", "USER_FLAIR") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -328,7 +328,7 @@ func (s *FlairService) DeleteAllPostTemplates(ctx context.Context, subreddit str form.Set("api_type", "json") form.Set("flair_type", "LINK_FLAIR") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -339,7 +339,7 @@ func (s *FlairService) DeleteAllPostTemplates(ctx context.Context, subreddit str // ReorderUserTemplates reorders the user flair templates in the order provided in the slice. func (s *FlairService) ReorderUserTemplates(ctx context.Context, subreddit string, ids []string) (*Response, error) { path := fmt.Sprintf("api/v1/%s/flair_template_order/USER_FLAIR", subreddit) - req, err := s.client.NewRequest(http.MethodPatch, path, ids) + req, err := s.client.NewJSONRequest(http.MethodPatch, path, ids) if err != nil { return nil, err } @@ -349,7 +349,7 @@ func (s *FlairService) ReorderUserTemplates(ctx context.Context, subreddit strin // ReorderPostTemplates reorders the post flair templates in the order provided in the slice. func (s *FlairService) ReorderPostTemplates(ctx context.Context, subreddit string, ids []string) (*Response, error) { path := fmt.Sprintf("api/v1/%s/flair_template_order/LINK_FLAIR", subreddit) - req, err := s.client.NewRequest(http.MethodPatch, path, ids) + req, err := s.client.NewJSONRequest(http.MethodPatch, path, ids) if err != nil { return nil, err } diff --git a/reddit/gold.go b/reddit/gold.go index 56b825a..e19e6d4 100644 --- a/reddit/gold.go +++ b/reddit/gold.go @@ -20,12 +20,10 @@ type GoldService struct { // This requires you to own Reddit coins and will consume them. func (s *GoldService) Gild(ctx context.Context, id string) (*Response, error) { path := fmt.Sprintf("api/v1/gold/gild/%s", id) - req, err := s.client.NewRequest(http.MethodPost, path, nil) if err != nil { return nil, err } - return s.client.Do(ctx, req, nil) } @@ -41,7 +39,7 @@ func (s *GoldService) Give(ctx context.Context, username string, months int) (*R form := url.Values{} form.Set("months", fmt.Sprint(months)) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/message.go b/reddit/message.go index 173211b..b49cd5a 100644 --- a/reddit/message.go +++ b/reddit/message.go @@ -118,12 +118,10 @@ type SendMessageRequest struct { // This endpoint is heavily rate limited. func (s *MessageService) ReadAll(ctx context.Context) (*Response, error) { path := "api/read_all_messages" - req, err := s.client.NewRequest(http.MethodPost, path, nil) if err != nil { return nil, err } - return s.client.Do(ctx, req, nil) } @@ -138,7 +136,7 @@ func (s *MessageService) Read(ctx context.Context, ids ...string) (*Response, er form := url.Values{} form.Set("id", strings.Join(ids, ",")) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -157,7 +155,7 @@ func (s *MessageService) Unread(ctx context.Context, ids ...string) (*Response, form := url.Values{} form.Set("id", strings.Join(ids, ",")) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -172,7 +170,7 @@ func (s *MessageService) Block(ctx context.Context, id string) (*Response, error form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -191,7 +189,7 @@ func (s *MessageService) Collapse(ctx context.Context, ids ...string) (*Response form := url.Values{} form.Set("id", strings.Join(ids, ",")) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -210,7 +208,7 @@ func (s *MessageService) Uncollapse(ctx context.Context, ids ...string) (*Respon form := url.Values{} form.Set("id", strings.Join(ids, ",")) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -225,7 +223,7 @@ func (s *MessageService) Delete(ctx context.Context, id string) (*Response, erro form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -247,7 +245,7 @@ func (s *MessageService) Send(ctx context.Context, sendRequest *SendMessageReque } form.Set("api_type", "json") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/moderation.go b/reddit/moderation.go index 9300d9a..a1af7d2 100644 --- a/reddit/moderation.go +++ b/reddit/moderation.go @@ -116,7 +116,7 @@ func (s *ModerationService) AcceptInvite(ctx context.Context, subreddit string) form := url.Values{} form.Set("api_type", "json") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -131,7 +131,7 @@ func (s *ModerationService) Approve(ctx context.Context, id string) (*Response, form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -147,7 +147,7 @@ func (s *ModerationService) Remove(ctx context.Context, id string) (*Response, e form.Set("id", id) form.Set("spam", "false") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -163,7 +163,7 @@ func (s *ModerationService) RemoveSpam(ctx context.Context, id string) (*Respons form.Set("id", id) form.Set("spam", "true") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -178,7 +178,7 @@ func (s *ModerationService) Leave(ctx context.Context, subredditID string) (*Res form := url.Values{} form.Set("id", subredditID) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -193,7 +193,7 @@ func (s *ModerationService) LeaveContributor(ctx context.Context, subredditID st form := url.Values{} form.Set("id", subredditID) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -259,7 +259,7 @@ func (s *ModerationService) IgnoreReports(ctx context.Context, id string) (*Resp form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -274,7 +274,7 @@ func (s *ModerationService) UnignoreReports(ctx context.Context, id string) (*Re form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -293,7 +293,7 @@ func (s *ModerationService) Invite(ctx context.Context, subreddit string, userna form.Set("type", "moderator_invite") form.Set("permissions", permissions.String()) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -317,7 +317,7 @@ func (s *ModerationService) SetPermissions(ctx context.Context, subreddit string form.Set("type", "moderator_invite") form.Set("permissions", permissions.String()) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -338,7 +338,7 @@ func (s *ModerationService) Ban(ctx context.Context, subreddit string, username form.Set("name", username) form.Set("type", "banned") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -364,7 +364,7 @@ func (s *ModerationService) BanWiki(ctx context.Context, subreddit string, usern form.Set("name", username) form.Set("type", "wikibanned") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -415,7 +415,7 @@ func (s *ModerationService) createRelationship(ctx context.Context, subreddit, u form.Set("name", username) form.Set("type", relationship) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -431,7 +431,7 @@ func (s *ModerationService) deleteRelationship(ctx context.Context, subreddit, u form.Set("name", username) form.Set("type", relationship) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -449,7 +449,7 @@ func (s *ModerationService) Distinguish(ctx context.Context, id string) (*Respon form.Set("how", "yes") form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -468,7 +468,7 @@ func (s *ModerationService) DistinguishAndSticky(ctx context.Context, id string) form.Set("sticky", "true") form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -485,7 +485,7 @@ func (s *ModerationService) Undistinguish(ctx context.Context, id string) (*Resp form.Set("how", "no") form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/multi.go b/reddit/multi.go index 6844cf4..4ae15b3 100644 --- a/reddit/multi.go +++ b/reddit/multi.go @@ -109,15 +109,12 @@ func (r *MultiCreateOrUpdateRequest) Form() url.Values { } type rootMultiDescription struct { - Data struct { - Body string `json:"body_md"` - } `json:"data"` + Body string `json:"body_md"` } // Get the multireddit from its url path. func (s *MultiService) Get(ctx context.Context, multiPath string) (*Multi, *Response, error) { path := fmt.Sprintf("api/multi/%s", multiPath) - req, err := s.client.NewRequest(http.MethodGet, path, nil) if err != nil { return nil, nil, err @@ -136,7 +133,6 @@ func (s *MultiService) Get(ctx context.Context, multiPath string) (*Multi, *Resp // Mine returns your multireddits. func (s *MultiService) Mine(ctx context.Context) ([]*Multi, *Response, error) { path := "api/multi/mine" - req, err := s.client.NewRequest(http.MethodGet, path, nil) if err != nil { return nil, nil, err @@ -155,7 +151,6 @@ func (s *MultiService) Mine(ctx context.Context) ([]*Multi, *Response, error) { // Or, if the user is you, all of your multireddits. func (s *MultiService) Of(ctx context.Context, username string) ([]*Multi, *Response, error) { path := fmt.Sprintf("api/multi/user/%s", username) - req, err := s.client.NewRequest(http.MethodGet, path, nil) if err != nil { return nil, nil, err @@ -182,7 +177,7 @@ func (s *MultiService) Copy(ctx context.Context, copyRequest *MultiCopyRequest) return nil, nil, err } - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -204,8 +199,7 @@ func (s *MultiService) Create(ctx context.Context, createRequest *MultiCreateOrU } path := "api/multi" - - req, err := s.client.NewRequestWithForm(http.MethodPost, path, createRequest.Form()) + req, err := s.client.NewRequest(http.MethodPost, path, createRequest.Form()) if err != nil { return nil, nil, err } @@ -228,8 +222,7 @@ func (s *MultiService) Update(ctx context.Context, multiPath string, updateReque } path := fmt.Sprintf("api/multi/%s", multiPath) - - req, err := s.client.NewRequestWithForm(http.MethodPut, path, updateRequest.Form()) + req, err := s.client.NewRequest(http.MethodPut, path, updateRequest.Form()) if err != nil { return nil, nil, err } @@ -247,17 +240,15 @@ func (s *MultiService) Update(ctx context.Context, multiPath string, updateReque // Delete a multireddit. func (s *MultiService) Delete(ctx context.Context, multiPath string) (*Response, error) { path := fmt.Sprintf("api/multi/%s", multiPath) - req, err := s.client.NewRequest(http.MethodDelete, path, nil) if err != nil { return nil, err } - return s.client.Do(ctx, req, nil) } -// GetDescription gets a multireddit's description. -func (s *MultiService) GetDescription(ctx context.Context, multiPath string) (string, *Response, error) { +// Description gets a multireddit's description. +func (s *MultiService) Description(ctx context.Context, multiPath string) (string, *Response, error) { path := fmt.Sprintf("api/multi/%s/description", multiPath) req, err := s.client.NewRequest(http.MethodGet, path, nil) @@ -265,13 +256,14 @@ func (s *MultiService) GetDescription(ctx context.Context, multiPath string) (st return "", nil, err } - root := new(rootMultiDescription) + root := new(thing) resp, err := s.client.Do(ctx, req, root) if err != nil { return "", resp, err } - return root.Data.Body, resp, nil + multiDescription, _ := root.MultiDescription() + return multiDescription, resp, nil } // UpdateDescription updates a multireddit's description. @@ -281,18 +273,19 @@ func (s *MultiService) UpdateDescription(ctx context.Context, multiPath string, form := url.Values{} form.Set("model", fmt.Sprintf(`{"body_md":"%s"}`, description)) - req, err := s.client.NewRequestWithForm(http.MethodPut, path, form) + req, err := s.client.NewRequest(http.MethodPut, path, form) if err != nil { return "", nil, err } - root := new(rootMultiDescription) + root := new(thing) resp, err := s.client.Do(ctx, req, root) if err != nil { return "", resp, err } - return root.Data.Body, resp, nil + multiDescription, _ := root.MultiDescription() + return multiDescription, resp, nil } // AddSubreddit adds a subreddit to a multireddit. @@ -302,7 +295,7 @@ func (s *MultiService) AddSubreddit(ctx context.Context, multiPath string, subre form := url.Values{} form.Set("model", fmt.Sprintf(`{"name":"%s"}`, subreddit)) - req, err := s.client.NewRequestWithForm(http.MethodPut, path, form) + req, err := s.client.NewRequest(http.MethodPut, path, form) if err != nil { return nil, err } @@ -313,11 +306,9 @@ func (s *MultiService) AddSubreddit(ctx context.Context, multiPath string, subre // DeleteSubreddit removes a subreddit from a multireddit. func (s *MultiService) DeleteSubreddit(ctx context.Context, multiPath string, subreddit string) (*Response, error) { path := fmt.Sprintf("api/multi/%s/r/%s", multiPath, subreddit) - req, err := s.client.NewRequest(http.MethodDelete, path, nil) if err != nil { return nil, err } - return s.client.Do(ctx, req, nil) } diff --git a/reddit/multi_test.go b/reddit/multi_test.go index e79d80c..748feb8 100644 --- a/reddit/multi_test.go +++ b/reddit/multi_test.go @@ -217,7 +217,7 @@ func TestMultiService_Delete(t *testing.T) { require.NoError(t, err) } -func TestMultiService_GetDescription(t *testing.T) { +func TestMultiService_Description(t *testing.T) { client, mux, teardown := setup() defer teardown() @@ -229,7 +229,7 @@ func TestMultiService_GetDescription(t *testing.T) { fmt.Fprint(w, blob) }) - description, _, err := client.Multi.GetDescription(ctx, "user/testuser/m/testmulti") + description, _, err := client.Multi.Description(ctx, "user/testuser/m/testmulti") require.NoError(t, err) require.Equal(t, "hello world", description) } diff --git a/reddit/post-and-comment.go b/reddit/post-and-comment.go index 04d0bc8..163f398 100644 --- a/reddit/post-and-comment.go +++ b/reddit/post-and-comment.go @@ -32,7 +32,7 @@ func (s *postAndCommentService) Delete(ctx context.Context, id string) (*Respons form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -47,7 +47,7 @@ func (s *postAndCommentService) Save(ctx context.Context, id string) (*Response, form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -62,7 +62,7 @@ func (s *postAndCommentService) Unsave(ctx context.Context, id string) (*Respons form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -78,7 +78,7 @@ func (s *postAndCommentService) EnableReplies(ctx context.Context, id string) (* form.Set("id", id) form.Set("state", "true") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -94,7 +94,7 @@ func (s *postAndCommentService) DisableReplies(ctx context.Context, id string) ( form.Set("id", id) form.Set("state", "false") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -109,7 +109,7 @@ func (s *postAndCommentService) Lock(ctx context.Context, id string) (*Response, form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -124,7 +124,7 @@ func (s *postAndCommentService) Unlock(ctx context.Context, id string) (*Respons form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -140,7 +140,7 @@ func (s *postAndCommentService) vote(ctx context.Context, id string, vote vote) form.Set("dir", fmt.Sprint(vote)) form.Set("rank", "10") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -163,7 +163,7 @@ func (s *postAndCommentService) RemoveVote(ctx context.Context, id string) (*Res return s.vote(ctx, id, novote) } -// Report reports a post or comment. +// Report a post or comment. // The reason must not be longer than 100 characters. func (s *postAndCommentService) Report(ctx context.Context, id string, reason string) (*Response, error) { path := "api/report" @@ -173,7 +173,7 @@ func (s *postAndCommentService) Report(ctx context.Context, id string, reason st form.Set("thing_id", id) form.Set("reason", reason) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/post.go b/reddit/post.go index 193400b..193feb3 100644 --- a/reddit/post.go +++ b/reddit/post.go @@ -123,7 +123,7 @@ func (s *PostService) submit(ctx context.Context, v interface{}) (*Submitted, *R } form.Set("api_type", "json") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -165,7 +165,7 @@ func (s *PostService) Edit(ctx context.Context, id string, text string) (*Post, form.Set("thing_id", id) form.Set("text", text) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -190,7 +190,7 @@ func (s *PostService) Hide(ctx context.Context, ids ...string) (*Response, error form := url.Values{} form.Set("id", strings.Join(ids, ",")) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -209,7 +209,7 @@ func (s *PostService) Unhide(ctx context.Context, ids ...string) (*Response, err form := url.Values{} form.Set("id", strings.Join(ids, ",")) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -224,7 +224,7 @@ func (s *PostService) MarkNSFW(ctx context.Context, id string) (*Response, error form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -239,7 +239,7 @@ func (s *PostService) UnmarkNSFW(ctx context.Context, id string) (*Response, err form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -254,7 +254,7 @@ func (s *PostService) Spoiler(ctx context.Context, id string) (*Response, error) form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -269,7 +269,7 @@ func (s *PostService) Unspoiler(ctx context.Context, id string) (*Response, erro form := url.Values{} form.Set("id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -292,7 +292,7 @@ func (s *PostService) Sticky(ctx context.Context, id string, bottom bool) (*Resp form.Set("num", "1") } - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -309,7 +309,7 @@ func (s *PostService) Unsticky(ctx context.Context, id string) (*Response, error form.Set("id", id) form.Set("state", "false") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -341,7 +341,7 @@ func (s *PostService) PinToProfile(ctx context.Context, id string) (*Response, e form.Set("to_profile", "true") // form.Set("num", fmt.Sprint(pos)) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -359,7 +359,7 @@ func (s *PostService) UnpinFromProfile(ctx context.Context, id string) (*Respons form.Set("state", "false") form.Set("to_profile", "true") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -377,7 +377,7 @@ func (s *PostService) setSuggestedSort(ctx context.Context, id string, sort stri form.Set("id", id) form.Set("sort", sort) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -441,7 +441,7 @@ func (s *PostService) EnableContestMode(ctx context.Context, id string) (*Respon form.Set("id", id) form.Set("state", "true") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -458,7 +458,7 @@ func (s *PostService) DisableContestMode(ctx context.Context, id string) (*Respo form.Set("id", id) form.Set("state", "false") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -488,7 +488,7 @@ func (s *PostService) LoadMoreComments(ctx context.Context, pc *PostAndComments) // This was originally a GET, but with POST you can send a bigger payload // since it's in the body and not the URI. - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -575,7 +575,7 @@ func (s *PostService) MarkVisited(ctx context.Context, ids ...string) (*Response form := url.Values{} form.Set("links", strings.Join(ids, ",")) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/reddit.go b/reddit/reddit.go index 5e603d4..a362cae 100644 --- a/reddit/reddit.go +++ b/reddit/reddit.go @@ -217,10 +217,36 @@ func (c *Client) UserAgent() string { return c.userAgent } -// NewRequest creates an API request with a JSON body. +// NewRequest creates an API request with form data as the body. +// The path is the relative URL which will be resolves to the BaseURL of the Client. +// It should always be specified without a preceding slash. +func (c *Client) NewRequest(method string, path string, form url.Values) (*http.Request, error) { + u, err := c.BaseURL.Parse(path) + if err != nil { + return nil, err + } + + var body io.Reader + if form != nil { + body = strings.NewReader(form.Encode()) + } + + req, err := http.NewRequest(method, u.String(), body) + if err != nil { + return nil, err + } + + c.appendJSONExtensionToRequestURLPath(req) + req.Header.Add(headerContentType, mediaTypeForm) + req.Header.Add(headerAccept, mediaTypeJSON) + + return req, nil +} + +// NewJSONRequest creates an API request with a JSON body. // The path is the relative URL which will be resolved to the BaseURL of the Client. // It should always be specified without a preceding slash. -func (c *Client) NewRequest(method string, path string, body interface{}) (*http.Request, error) { +func (c *Client) NewJSONRequest(method string, path string, body interface{}) (*http.Request, error) { u, err := c.BaseURL.Parse(path) if err != nil { return nil, err @@ -247,27 +273,6 @@ func (c *Client) NewRequest(method string, path string, body interface{}) (*http return req, nil } -// NewRequestWithForm creates an API request with form data. -// The path is the relative URL which will be resolves to the BaseURL of the Client. -// It should always be specified without a preceding slash. -func (c *Client) NewRequestWithForm(method string, path string, form url.Values) (*http.Request, error) { - u, err := c.BaseURL.Parse(path) - if err != nil { - return nil, err - } - - req, err := http.NewRequest(method, u.String(), strings.NewReader(form.Encode())) - if err != nil { - return nil, err - } - - c.appendJSONExtensionToRequestURLPath(req) - req.Header.Add(headerContentType, mediaTypeForm) - req.Header.Add(headerAccept, mediaTypeJSON) - - return req, nil -} - // Response is a Reddit response. This wraps the standard http.Response returned from Reddit. type Response struct { *http.Response diff --git a/reddit/subreddit.go b/reddit/subreddit.go index b136767..9cad451 100644 --- a/reddit/subreddit.go +++ b/reddit/subreddit.go @@ -187,12 +187,10 @@ func (s *SubredditService) GetSticky2(ctx context.Context, subreddit string) (*P func (s *SubredditService) handleSubscription(ctx context.Context, form url.Values) (*Response, error) { path := "api/subscribe" - - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } - return s.client.Do(ctx, req, nil) } @@ -237,7 +235,7 @@ func (s *SubredditService) Favorite(ctx context.Context, subreddit string) (*Res form.Set("make_favorite", "true") form.Set("api_type", "json") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -254,7 +252,7 @@ func (s *SubredditService) Unfavorite(ctx context.Context, subreddit string) (*R form.Set("make_favorite", "false") form.Set("api_type", "json") - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -425,7 +423,7 @@ func (s *SubredditService) random(ctx context.Context, nsfw bool) (*Subreddit, * root := new(struct { Data struct { - Children []struct { + Children [1]struct { Data struct { Subreddit *Subreddit `json:"sr_detail"` } `json:"data"` @@ -437,12 +435,8 @@ func (s *SubredditService) random(ctx context.Context, nsfw bool) (*Subreddit, * return nil, resp, err } - var sr *Subreddit - if len(root.Data.Children) > 0 { - sr = root.Data.Children[0].Data.Subreddit - } - - return sr, resp, nil + subreddit := root.Data.Children[0].Data.Subreddit + return subreddit, resp, nil } // Random returns a random SFW subreddit. diff --git a/reddit/things.go b/reddit/things.go index c7f3ee9..0f6a83c 100644 --- a/reddit/things.go +++ b/reddit/things.go @@ -19,6 +19,7 @@ const ( kindMore = "more" kindModAction = "modaction" kindMulti = "LabeledMulti" + kindMultiDescription = "LabeledMultiDescription" kindWikiPage = "wikipage" kindWikiPageListing = "wikipagelisting" kindWikiPageSettings = "wikipagesettings" @@ -91,6 +92,8 @@ func (t *thing) UnmarshalJSON(b []byte) error { v = new(ModAction) case kindMulti: v = new(Multi) + case kindMultiDescription: + v = new(rootMultiDescription) case kindTrophy: v = new(Trophy) case kindTrophyList: @@ -156,6 +159,14 @@ func (t *thing) Multi() (v *Multi, ok bool) { return } +func (t *thing) MultiDescription() (s string, ok bool) { + v, ok := t.Data.(*rootMultiDescription) + if ok { + s = v.Body + } + return +} + func (t *thing) Trophy() (v *Trophy, ok bool) { v, ok = t.Data.(*Trophy) return diff --git a/reddit/user.go b/reddit/user.go index 5f03226..bb5a6aa 100644 --- a/reddit/user.go +++ b/reddit/user.go @@ -366,7 +366,7 @@ func (s *UserService) Friend(ctx context.Context, username string) (*Relationshi }{username} path := fmt.Sprintf("api/v1/me/friends/%s", username) - req, err := s.client.NewRequest(http.MethodPut, path, body) + req, err := s.client.NewJSONRequest(http.MethodPut, path, body) if err != nil { return nil, nil, err } @@ -397,7 +397,7 @@ func (s *UserService) Block(ctx context.Context, username string) (*Blocked, *Re form := url.Values{} form.Set("name", username) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -418,7 +418,7 @@ func (s *UserService) BlockByID(ctx context.Context, id string) (*Blocked, *Resp form := url.Values{} form.Set("account_id", id) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -446,7 +446,7 @@ func (s *UserService) Unblock(ctx context.Context, username string) (*Response, form.Set("type", "enemy") form.Set("container", selfID) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -468,7 +468,7 @@ func (s *UserService) UnblockByID(ctx context.Context, id string) (*Response, er form.Set("type", "enemy") form.Set("container", selfID) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } diff --git a/reddit/wiki.go b/reddit/wiki.go index 6980f35..e834b45 100644 --- a/reddit/wiki.go +++ b/reddit/wiki.go @@ -244,7 +244,7 @@ func (s *WikiService) Edit(ctx context.Context, editRequest *WikiPageEditRequest } path := fmt.Sprintf("r/%s/api/wiki/edit", editRequest.Subreddit) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -260,7 +260,7 @@ func (s *WikiService) Revert(ctx context.Context, subreddit, page, revisionID st form.Set("page", page) form.Set("revision", revisionID) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -299,7 +299,7 @@ func (s *WikiService) UpdateSettings(ctx context.Context, subreddit, page string } path := fmt.Sprintf("r/%s/wiki/settings/%s", subreddit, page) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, nil, err } @@ -346,7 +346,7 @@ func (s *WikiService) ToggleVisibility(ctx context.Context, subreddit, page, rev form.Set("page", page) form.Set("revision", revisionID) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return false, nil, err } @@ -416,7 +416,7 @@ func (s *WikiService) Allow(ctx context.Context, subreddit, page, username strin form.Set("page", page) form.Set("username", username) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err } @@ -432,7 +432,7 @@ func (s *WikiService) Deny(ctx context.Context, subreddit, page, username string form.Set("page", page) form.Set("username", username) - req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + req, err := s.client.NewRequest(http.MethodPost, path, form) if err != nil { return nil, err }