refactor: refactor the ListRepliesPolicy enum type
Refactor the ListRepliesPolicy enum type to bring it in line with the others.
This commit is contained in:
parent
ea05294cb5
commit
35575f32de
4 changed files with 50 additions and 35 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue