checkpoint: add a type for representing the enum values of status visibility
This commit is contained in:
parent
e73dbb45ed
commit
5f24a68ca9
2 changed files with 103 additions and 33 deletions
|
@ -26,7 +26,7 @@ func ParseListRepliesPolicy(policy string) (ListRepliesPolicy, error) {
|
|||
return ListRepliesPolicyNone, nil
|
||||
}
|
||||
|
||||
return ListRepliesPolicy(-1), errors.New("invalid list replies policy")
|
||||
return ListRepliesPolicy(-1), fmt.Errorf("%q is not a valid list replies policy", policy)
|
||||
}
|
||||
|
||||
func (l ListRepliesPolicy) String() string {
|
||||
|
@ -43,12 +43,12 @@ func (l ListRepliesPolicy) String() string {
|
|||
}
|
||||
|
||||
func (l ListRepliesPolicy) MarshalJSON() ([]byte, error) {
|
||||
str := l.String()
|
||||
if str == "" {
|
||||
value := l.String()
|
||||
if value == "" {
|
||||
return nil, errors.New("invalid list replies policy")
|
||||
}
|
||||
|
||||
return json.Marshal(str)
|
||||
return json.Marshal(value)
|
||||
}
|
||||
|
||||
func (l *ListRepliesPolicy) UnmarshalJSON(data []byte) error {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
|
@ -36,7 +37,7 @@ type Status struct {
|
|||
Text string `json:"text"`
|
||||
URI string `json:"uri"`
|
||||
URL string `json:"url"`
|
||||
Visibility string `json:"visibility"`
|
||||
Visibility StatusVisibility `json:"visibility"`
|
||||
}
|
||||
|
||||
type Card struct {
|
||||
|
@ -109,7 +110,7 @@ type StatusReblogged struct {
|
|||
Text string `json:"text"`
|
||||
URI string `json:"uri"`
|
||||
URL string `json:"url"`
|
||||
Visibility string `json:"visibility"`
|
||||
Visibility StatusVisibility `json:"visibility"`
|
||||
}
|
||||
|
||||
type Tag struct {
|
||||
|
@ -195,3 +196,72 @@ func (s Status) String() string {
|
|||
s.URL,
|
||||
)
|
||||
}
|
||||
|
||||
type StatusVisibility int
|
||||
|
||||
const (
|
||||
StatusVisibilityPublic StatusVisibility = iota
|
||||
StatusVisibilityPrivate
|
||||
StatusVisibilityUnlisted
|
||||
StatusVisibilityMutualsOnly
|
||||
StatusVisibilityDirect
|
||||
StatusVisibilityUnknown
|
||||
)
|
||||
|
||||
func (s StatusVisibility) String() string {
|
||||
switch s {
|
||||
case StatusVisibilityPublic:
|
||||
return "public"
|
||||
case StatusVisibilityPrivate:
|
||||
return "private"
|
||||
case StatusVisibilityUnlisted:
|
||||
return "unlisted"
|
||||
case StatusVisibilityMutualsOnly:
|
||||
return "mutuals_only"
|
||||
case StatusVisibilityDirect:
|
||||
return "direct"
|
||||
}
|
||||
|
||||
return "unknown"
|
||||
}
|
||||
|
||||
func ParseStatusVisibility(visibility string) (StatusVisibility, error) {
|
||||
switch visibility {
|
||||
case "public":
|
||||
return StatusVisibilityPublic, nil
|
||||
case "private":
|
||||
return StatusVisibilityPrivate, nil
|
||||
case "unlisted":
|
||||
return StatusVisibilityUnlisted, nil
|
||||
case "mutuals_only":
|
||||
return StatusVisibilityMutualsOnly, nil
|
||||
case "direct":
|
||||
return StatusVisibilityDirect, nil
|
||||
}
|
||||
|
||||
return StatusVisibilityUnknown, nil
|
||||
}
|
||||
|
||||
func (s StatusVisibility) MarshalJSON() ([]byte, error) {
|
||||
value := s.String()
|
||||
if value == "unknown" {
|
||||
return nil, fmt.Errorf("%q is not a valid status visibility", value)
|
||||
}
|
||||
|
||||
return json.Marshal(value)
|
||||
}
|
||||
|
||||
func (s *StatusVisibility) 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)
|
||||
}
|
||||
|
||||
*s, _ = ParseStatusVisibility(value)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue