From 74220dd25e3c14cf904cb4b3a329404a2f006ef1 Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Thu, 30 May 2024 06:55:01 +0100 Subject: [PATCH] refactor: CreateStatusForm; fix: InvalidStatusVisibilityError --- internal/client/statuses.go | 48 ++++++++++--------------------------- internal/executor/create.go | 28 ++++++++++++---------- internal/executor/errors.go | 8 +++++++ 3 files changed, 36 insertions(+), 48 deletions(-) diff --git a/internal/client/statuses.go b/internal/client/statuses.go index 0e63e59..aaea8bf 100644 --- a/internal/client/statuses.go +++ b/internal/client/statuses.go @@ -25,42 +25,20 @@ func (g *Client) GetStatus(statusID string) (model.Status, error) { return status, nil } -func (g *Client) CreateStatus( - content, - contentType, - language, - spoilerText string, - boostable, - federated, - likeable, - replyable, - sensitive bool, - visibility model.StatusVisibility, -) (model.Status, error) { - form := struct { - ContentType string `json:"content_type"` - Language string `json:"language"` - SpoilerText string `json:"spoiler_text"` - Status string `json:"status"` - Boostable bool `json:"boostable"` - Federated bool `json:"federated"` - Likeable bool `json:"likeable"` - Replyable bool `json:"replyable"` - Sensitive bool `json:"sensitive"` - Visibility model.StatusVisibility `json:"visibility"` - }{ - ContentType: contentType, - Language: language, - SpoilerText: spoilerText, - Status: content, - Boostable: boostable, - Federated: federated, - Likeable: likeable, - Sensitive: sensitive, - Replyable: replyable, - Visibility: visibility, - } +type CreateStatusForm struct { + Content string `json:"status"` + ContentType string `json:"content_type"` + Language string `json:"language"` + SpoilerText string `json:"spoiler_text"` + Boostable bool `json:"boostable"` + Federated bool `json:"federated"` + Likeable bool `json:"likeable"` + Replyable bool `json:"replyable"` + Sensitive bool `json:"sensitive"` + Visibility model.StatusVisibility `json:"visibility"` +} +func (g *Client) CreateStatus(form CreateStatusForm) (model.Status, error) { data, err := json.Marshal(form) if err != nil { return model.Status{}, fmt.Errorf("unable to create the JSON form; %w", err) diff --git a/internal/executor/create.go b/internal/executor/create.go index fe59812..c067d35 100644 --- a/internal/executor/create.go +++ b/internal/executor/create.go @@ -126,21 +126,23 @@ func (c *CreateExecutor) createStatus(gtsClient *client.Client) error { parsedVisibility := model.ParseStatusVisibility(visibility) if parsedVisibility == model.StatusVisibilityUnknown { - return fmt.Errorf("invalid status visibility %q", visibility) + return InvalidStatusVisibilityError{Visibility: visibility} } - status, err := gtsClient.CreateStatus( - c.content, - c.contentType, - language, - c.spoilerText, - c.boostable, - c.federated, - c.likeable, - c.replyable, - c.sensitive, - parsedVisibility, - ) + form := client.CreateStatusForm{ + Content: c.content, + ContentType: c.contentType, + Language: language, + SpoilerText: c.spoilerText, + Boostable: c.boostable, + Federated: c.federated, + Likeable: c.likeable, + Replyable: c.replyable, + Sensitive: c.sensitive, + Visibility: parsedVisibility, + } + + status, err := gtsClient.CreateStatus(form) if err != nil { return fmt.Errorf("unable to create the status; %w", err) } diff --git a/internal/executor/errors.go b/internal/executor/errors.go index 0f1e2d5..b9133b2 100644 --- a/internal/executor/errors.go +++ b/internal/executor/errors.go @@ -53,3 +53,11 @@ type EmptyContentError struct{} func (e EmptyContentError) Error() string { return "content should not be empty" } + +type InvalidStatusVisibilityError struct { + Visibility string +} + +func (e InvalidStatusVisibilityError) Error() string { + return "'" + e.Visibility + "' is an invalid status visibility value" +}