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 {
|
||||||
|
@ -82,34 +83,34 @@ type PollOption struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type StatusReblogged struct {
|
type StatusReblogged struct {
|
||||||
Account Account `json:"account"`
|
Account Account `json:"account"`
|
||||||
Application Application `json:"application"`
|
Application Application `json:"application"`
|
||||||
Bookmarked bool `json:"bookmarked"`
|
Bookmarked bool `json:"bookmarked"`
|
||||||
Card Card `json:"card"`
|
Card Card `json:"card"`
|
||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
CreatedAt time.Time `json:"created_at"`
|
CreatedAt time.Time `json:"created_at"`
|
||||||
Emojis []Emoji `json:"emojis"`
|
Emojis []Emoji `json:"emojis"`
|
||||||
Favourited bool `json:"favourited"`
|
Favourited bool `json:"favourited"`
|
||||||
FavouritesCount int `json:"favourites_count"`
|
FavouritesCount int `json:"favourites_count"`
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
InReplyToAccountID string `json:"in_reply_to_account_id"`
|
InReplyToAccountID string `json:"in_reply_to_account_id"`
|
||||||
InReplyToID string `json:"in_reply_to_id"`
|
InReplyToID string `json:"in_reply_to_id"`
|
||||||
Language string `json:"language"`
|
Language string `json:"language"`
|
||||||
MediaAttachments []Attachment `json:"media_attachments"`
|
MediaAttachments []Attachment `json:"media_attachments"`
|
||||||
Mentions []Mention `json:"mentions"`
|
Mentions []Mention `json:"mentions"`
|
||||||
Muted bool `json:"muted"`
|
Muted bool `json:"muted"`
|
||||||
Pinned bool `json:"pinned"`
|
Pinned bool `json:"pinned"`
|
||||||
Poll Poll `json:"poll"`
|
Poll Poll `json:"poll"`
|
||||||
Reblogged bool `json:"reblogged"`
|
Reblogged bool `json:"reblogged"`
|
||||||
RebloggsCount int `json:"reblogs_count"`
|
RebloggsCount int `json:"reblogs_count"`
|
||||||
RepliesCount int `json:"replies_count"`
|
RepliesCount int `json:"replies_count"`
|
||||||
Sensitive bool `json:"sensitive"`
|
Sensitive bool `json:"sensitive"`
|
||||||
SpolierText string `json:"spoiler_text"`
|
SpolierText string `json:"spoiler_text"`
|
||||||
Tags []Tag `json:"tags"`
|
Tags []Tag `json:"tags"`
|
||||||
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