Dan Anglin
3d20adfa57
- Replace .reuse/dep5 with the new REUSE.toml file. - Add licensing information to REUSE.toml and remove the licensing headers from the source files.
103 lines
2.2 KiB
Go
103 lines
2.2 KiB
Go
package model
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
type ListRepliesPolicy int
|
|
|
|
const (
|
|
ListRepliesPolicyFollowed ListRepliesPolicy = iota
|
|
ListRepliesPolicyList
|
|
ListRepliesPolicyNone
|
|
ListRepliesPolicyUnknown
|
|
)
|
|
|
|
const (
|
|
listRepliesPolicyFollowedValue = "followed"
|
|
listRepliesPolicyListValue = "list"
|
|
listRepliesPolicyNoneValue = "none"
|
|
)
|
|
|
|
func (l ListRepliesPolicy) String() string {
|
|
mapped := map[ListRepliesPolicy]string{
|
|
ListRepliesPolicyFollowed: listRepliesPolicyFollowedValue,
|
|
ListRepliesPolicyList: listRepliesPolicyListValue,
|
|
ListRepliesPolicyNone: listRepliesPolicyNoneValue,
|
|
}
|
|
|
|
output, ok := mapped[l]
|
|
if !ok {
|
|
return unknownValue
|
|
}
|
|
|
|
return output
|
|
}
|
|
|
|
func ParseListRepliesPolicy(value string) (ListRepliesPolicy, error) {
|
|
mapped := map[string]ListRepliesPolicy{
|
|
listRepliesPolicyFollowedValue: ListRepliesPolicyFollowed,
|
|
listRepliesPolicyListValue: ListRepliesPolicyList,
|
|
listRepliesPolicyNoneValue: ListRepliesPolicyNone,
|
|
}
|
|
|
|
output, ok := mapped[value]
|
|
if !ok {
|
|
return ListRepliesPolicyUnknown, InvalidListRepliesPolicyError{value}
|
|
}
|
|
|
|
return output, nil
|
|
}
|
|
|
|
func (l ListRepliesPolicy) MarshalJSON() ([]byte, error) {
|
|
value := l.String()
|
|
if value == unknownValue {
|
|
return nil, InvalidListRepliesPolicyError{value}
|
|
}
|
|
|
|
data, err := json.Marshal(value)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("unable to encode %s to JSON: %w", value, err)
|
|
}
|
|
|
|
return data, nil
|
|
}
|
|
|
|
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 decode the JSON data: %w", err)
|
|
}
|
|
|
|
*l, err = ParseListRepliesPolicy(value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type InvalidListRepliesPolicyError struct {
|
|
Value string
|
|
}
|
|
|
|
func (e InvalidListRepliesPolicyError) Error() string {
|
|
return "'" +
|
|
e.Value +
|
|
"' is not a valid list replies policy: valid values are " +
|
|
listRepliesPolicyFollowedValue + ", " +
|
|
listRepliesPolicyListValue + ", " +
|
|
listRepliesPolicyNoneValue
|
|
}
|
|
|
|
type List struct {
|
|
ID string `json:"id"`
|
|
RepliesPolicy ListRepliesPolicy `json:"replies_policy"`
|
|
Title string `json:"title"`
|
|
Accounts map[string]string
|
|
}
|