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 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 {
|
func (l ListRepliesPolicy) String() string {
|
||||||
|
@ -43,12 +43,12 @@ func (l ListRepliesPolicy) String() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l ListRepliesPolicy) MarshalJSON() ([]byte, error) {
|
func (l ListRepliesPolicy) MarshalJSON() ([]byte, error) {
|
||||||
str := l.String()
|
value := l.String()
|
||||||
if str == "" {
|
if value == "" {
|
||||||
return nil, errors.New("invalid list replies policy")
|
return nil, errors.New("invalid list replies policy")
|
||||||
}
|
}
|
||||||
|
|
||||||
return json.Marshal(str)
|
return json.Marshal(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *ListRepliesPolicy) UnmarshalJSON(data []byte) error {
|
func (l *ListRepliesPolicy) UnmarshalJSON(data []byte) error {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -36,7 +37,7 @@ type Status struct {
|
||||||
Text string `json:"text"`
|
Text string `json:"text"`
|
||||||
URI string `json:"uri"`
|
URI string `json:"uri"`
|
||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
Visibility string `json:"visibility"`
|
Visibility StatusVisibility `json:"visibility"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Card struct {
|
type Card struct {
|
||||||
|
@ -109,7 +110,7 @@ type StatusReblogged struct {
|
||||||
Text string `json:"text"`
|
Text string `json:"text"`
|
||||||
URI string `json:"uri"`
|
URI string `json:"uri"`
|
||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
Visibility string `json:"visibility"`
|
Visibility StatusVisibility `json:"visibility"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Tag struct {
|
type Tag struct {
|
||||||
|
@ -195,3 +196,72 @@ func (s Status) String() string {
|
||||||
s.URL,
|
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