From 35575f32de916637315b40ca4d490c8c90ce8351 Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Thu, 30 May 2024 19:42:11 +0100 Subject: [PATCH] refactor: refactor the ListRepliesPolicy enum type Refactor the ListRepliesPolicy enum type to bring it in line with the others. --- internal/executor/create.go | 8 ++--- internal/executor/errors.go | 8 +++++ internal/executor/update.go | 8 ++--- internal/model/list.go | 61 +++++++++++++++++++++---------------- 4 files changed, 50 insertions(+), 35 deletions(-) diff --git a/internal/executor/create.go b/internal/executor/create.go index 13d306f..23ca645 100644 --- a/internal/executor/create.go +++ b/internal/executor/create.go @@ -81,12 +81,12 @@ func (c *CreateExecutor) createList(gtsClient *client.Client) error { return FlagNotSetError{flagText: flagListTitle} } - repliesPolicy, err := model.ParseListRepliesPolicy(c.listRepliesPolicy) - if err != nil { - return fmt.Errorf("unable to parse the list replies policy; %w", err) + parsedListRepliesPolicy := model.ParseListRepliesPolicy(c.listRepliesPolicy) + if parsedListRepliesPolicy == model.ListRepliesPolicyUnknown { + return InvalidListRepliesPolicyError{Policy: c.listRepliesPolicy} } - list, err := gtsClient.CreateList(c.listTitle, repliesPolicy) + list, err := gtsClient.CreateList(c.listTitle, parsedListRepliesPolicy) if err != nil { return fmt.Errorf("unable to create the list; %w", err) } diff --git a/internal/executor/errors.go b/internal/executor/errors.go index e27a2f2..766103a 100644 --- a/internal/executor/errors.go +++ b/internal/executor/errors.go @@ -69,3 +69,11 @@ type InvalidStatusContentTypeError struct { func (e InvalidStatusContentTypeError) Error() string { return "'" + e.ContentType + "' is an invalid status content type (valid values are plain and markdown)" } + +type InvalidListRepliesPolicyError struct { + Policy string +} + +func (e InvalidListRepliesPolicyError) Error() string { + return "'" + e.Policy + "' is an invalid list replies policy" +} diff --git a/internal/executor/update.go b/internal/executor/update.go index 44ce4ef..a3517c0 100644 --- a/internal/executor/update.go +++ b/internal/executor/update.go @@ -71,12 +71,12 @@ func (e *EditExecutor) updateList(gtsClient *client.Client) error { } if e.listRepliesPolicy != "" { - repliesPolicy, err := model.ParseListRepliesPolicy(e.listRepliesPolicy) - if err != nil { - return fmt.Errorf("unable to parse the list replies policy; %w", err) + parsedListRepliesPolicy := model.ParseListRepliesPolicy(e.listRepliesPolicy) + if parsedListRepliesPolicy == model.ListRepliesPolicyUnknown { + return InvalidListRepliesPolicyError{Policy: e.listRepliesPolicy} } - list.RepliesPolicy = repliesPolicy + list.RepliesPolicy = parsedListRepliesPolicy } updatedList, err := gtsClient.UpdateList(list) diff --git a/internal/model/list.go b/internal/model/list.go index d22df3c..c45c40b 100644 --- a/internal/model/list.go +++ b/internal/model/list.go @@ -2,7 +2,6 @@ package model import ( "encoding/json" - "errors" "fmt" "codeflow.dananglin.me.uk/apollo/enbas/internal/utilities" @@ -14,38 +13,49 @@ const ( ListRepliesPolicyFollowed ListRepliesPolicy = iota ListRepliesPolicyList ListRepliesPolicyNone + ListRepliesPolicyUnknown ) -func ParseListRepliesPolicy(policy string) (ListRepliesPolicy, error) { - switch policy { - case "followed": - return ListRepliesPolicyFollowed, nil - case "list": - return ListRepliesPolicyList, nil - case "none": - return ListRepliesPolicyNone, nil - } - - return ListRepliesPolicy(-1), fmt.Errorf("%q is not a valid list replies policy", policy) -} +const ( + listRepliesPolicyFollowedValue = "followed" + listRepliesPolicyListValue = "list" + listRepliesPolicyNoneValue = "none" +) func (l ListRepliesPolicy) String() string { - switch l { - case ListRepliesPolicyFollowed: - return "followed" - case ListRepliesPolicyList: - return "list" - case ListRepliesPolicyNone: - return "none" + mapped := map[ListRepliesPolicy]string{ + ListRepliesPolicyFollowed: listRepliesPolicyFollowedValue, + ListRepliesPolicyList: listRepliesPolicyListValue, + ListRepliesPolicyNone: listRepliesPolicyNoneValue, } - return "" + output, ok := mapped[l] + if !ok { + return unknownValue + } + + return output +} + +func ParseListRepliesPolicy(value string) ListRepliesPolicy { + mapped := map[string]ListRepliesPolicy{ + listRepliesPolicyFollowedValue: ListRepliesPolicyFollowed, + listRepliesPolicyListValue: ListRepliesPolicyList, + listRepliesPolicyNoneValue: ListRepliesPolicyNone, + } + + output, ok := mapped[value] + if !ok { + return ListRepliesPolicyUnknown + } + + return output } func (l ListRepliesPolicy) MarshalJSON() ([]byte, error) { value := l.String() - if value == "" { - return nil, errors.New("invalid list replies policy") + if value == unknownValue { + return nil, fmt.Errorf("%q is not a valid list replies policy") } return json.Marshal(value) @@ -61,10 +71,7 @@ func (l *ListRepliesPolicy) UnmarshalJSON(data []byte) error { return fmt.Errorf("unable to unmarshal the data; %w", err) } - *l, err = ParseListRepliesPolicy(value) - if err != nil { - return fmt.Errorf("unable to parse %s as a list replies policy; %w", value, err) - } + *l = ParseListRepliesPolicy(value) return nil }