refactor: refactor the ListRepliesPolicy enum type

Refactor the ListRepliesPolicy enum type to bring it in line with the
others.
This commit is contained in:
Dan Anglin 2024-05-30 19:42:11 +01:00
parent ea05294cb5
commit 35575f32de
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
4 changed files with 50 additions and 35 deletions

View file

@ -81,12 +81,12 @@ func (c *CreateExecutor) createList(gtsClient *client.Client) error {
return FlagNotSetError{flagText: flagListTitle} return FlagNotSetError{flagText: flagListTitle}
} }
repliesPolicy, err := model.ParseListRepliesPolicy(c.listRepliesPolicy) parsedListRepliesPolicy := model.ParseListRepliesPolicy(c.listRepliesPolicy)
if err != nil { if parsedListRepliesPolicy == model.ListRepliesPolicyUnknown {
return fmt.Errorf("unable to parse the list replies policy; %w", err) return InvalidListRepliesPolicyError{Policy: c.listRepliesPolicy}
} }
list, err := gtsClient.CreateList(c.listTitle, repliesPolicy) list, err := gtsClient.CreateList(c.listTitle, parsedListRepliesPolicy)
if err != nil { if err != nil {
return fmt.Errorf("unable to create the list; %w", err) return fmt.Errorf("unable to create the list; %w", err)
} }

View file

@ -69,3 +69,11 @@ type InvalidStatusContentTypeError struct {
func (e InvalidStatusContentTypeError) Error() string { func (e InvalidStatusContentTypeError) Error() string {
return "'" + e.ContentType + "' is an invalid status content type (valid values are plain and markdown)" 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"
}

View file

@ -71,12 +71,12 @@ func (e *EditExecutor) updateList(gtsClient *client.Client) error {
} }
if e.listRepliesPolicy != "" { if e.listRepliesPolicy != "" {
repliesPolicy, err := model.ParseListRepliesPolicy(e.listRepliesPolicy) parsedListRepliesPolicy := model.ParseListRepliesPolicy(e.listRepliesPolicy)
if err != nil { if parsedListRepliesPolicy == model.ListRepliesPolicyUnknown {
return fmt.Errorf("unable to parse the list replies policy; %w", err) return InvalidListRepliesPolicyError{Policy: e.listRepliesPolicy}
} }
list.RepliesPolicy = repliesPolicy list.RepliesPolicy = parsedListRepliesPolicy
} }
updatedList, err := gtsClient.UpdateList(list) updatedList, err := gtsClient.UpdateList(list)

View file

@ -2,7 +2,6 @@ package model
import ( import (
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"codeflow.dananglin.me.uk/apollo/enbas/internal/utilities" "codeflow.dananglin.me.uk/apollo/enbas/internal/utilities"
@ -14,38 +13,49 @@ const (
ListRepliesPolicyFollowed ListRepliesPolicy = iota ListRepliesPolicyFollowed ListRepliesPolicy = iota
ListRepliesPolicyList ListRepliesPolicyList
ListRepliesPolicyNone ListRepliesPolicyNone
ListRepliesPolicyUnknown
) )
func ParseListRepliesPolicy(policy string) (ListRepliesPolicy, error) { const (
switch policy { listRepliesPolicyFollowedValue = "followed"
case "followed": listRepliesPolicyListValue = "list"
return ListRepliesPolicyFollowed, nil listRepliesPolicyNoneValue = "none"
case "list": )
return ListRepliesPolicyList, nil
case "none":
return ListRepliesPolicyNone, nil
}
return ListRepliesPolicy(-1), fmt.Errorf("%q is not a valid list replies policy", policy)
}
func (l ListRepliesPolicy) String() string { func (l ListRepliesPolicy) String() string {
switch l { mapped := map[ListRepliesPolicy]string{
case ListRepliesPolicyFollowed: ListRepliesPolicyFollowed: listRepliesPolicyFollowedValue,
return "followed" ListRepliesPolicyList: listRepliesPolicyListValue,
case ListRepliesPolicyList: ListRepliesPolicyNone: listRepliesPolicyNoneValue,
return "list"
case ListRepliesPolicyNone:
return "none"
} }
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) { func (l ListRepliesPolicy) MarshalJSON() ([]byte, error) {
value := l.String() value := l.String()
if value == "" { if value == unknownValue {
return nil, errors.New("invalid list replies policy") return nil, fmt.Errorf("%q is not a valid list replies policy")
} }
return json.Marshal(value) 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) return fmt.Errorf("unable to unmarshal the data; %w", err)
} }
*l, err = ParseListRepliesPolicy(value) *l = ParseListRepliesPolicy(value)
if err != nil {
return fmt.Errorf("unable to parse %s as a list replies policy; %w", value, err)
}
return nil return nil
} }