Dan Anglin
bc18c00c69
Add the ability to create, update, list and delete lists. Note, adding accounts or removing them from lists is not scoped in this PR.
89 lines
1.7 KiB
Go
89 lines
1.7 KiB
Go
package model
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"codeflow.dananglin.me.uk/apollo/enbas/internal/utilities"
|
|
)
|
|
|
|
type ListRepliesPolicy int
|
|
|
|
const (
|
|
ListRepliesPolicyFollowed ListRepliesPolicy = iota
|
|
ListRepliesPolicyList
|
|
ListRepliesPolicyNone
|
|
)
|
|
|
|
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), errors.New("invalid list replies policy")
|
|
}
|
|
|
|
func (l ListRepliesPolicy) String() string {
|
|
switch l {
|
|
case ListRepliesPolicyFollowed:
|
|
return "followed"
|
|
case ListRepliesPolicyList:
|
|
return "list"
|
|
case ListRepliesPolicyNone:
|
|
return "none"
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
func (l ListRepliesPolicy) MarshalJSON() ([]byte, error) {
|
|
str := l.String()
|
|
if str == "" {
|
|
return nil, errors.New("invalid list replies policy")
|
|
}
|
|
|
|
return json.Marshal(str)
|
|
}
|
|
|
|
func (l *ListRepliesPolicy) UnmarshalJSON(data []byte) error {
|
|
var (
|
|
value string
|
|
err error
|
|
)
|
|
|
|
if err = json.Unmarshal(data, &value); err != nil {
|
|
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)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type List struct {
|
|
ID string `json:"id"`
|
|
RepliesPolicy ListRepliesPolicy `json:"replies_policy"`
|
|
Title string `json:"title"`
|
|
}
|
|
|
|
func (l List) String() string {
|
|
format := `%s %s
|
|
%s %s
|
|
%s %s`
|
|
|
|
return fmt.Sprintf(
|
|
format,
|
|
utilities.FieldFormat("List ID:"), l.ID,
|
|
utilities.FieldFormat("Title:"), l.Title,
|
|
utilities.FieldFormat("Replies Policy:"), l.RepliesPolicy,
|
|
)
|
|
}
|