use hash maps instead of switch statements
This commit is contained in:
parent
d2c7377627
commit
d7d0e111d7
4 changed files with 143 additions and 109 deletions
5
internal/model/const.go
Normal file
5
internal/model/const.go
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package model
|
||||||
|
|
||||||
|
const (
|
||||||
|
unknownValue = "unknown"
|
||||||
|
)
|
|
@ -1,7 +1,6 @@
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -196,111 +195,3 @@ 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(value string) StatusVisibility {
|
|
||||||
switch value {
|
|
||||||
case "public":
|
|
||||||
return StatusVisibilityPublic
|
|
||||||
case "private":
|
|
||||||
return StatusVisibilityPrivate
|
|
||||||
case "unlisted":
|
|
||||||
return StatusVisibilityUnlisted
|
|
||||||
case "mutuals_only":
|
|
||||||
return StatusVisibilityMutualsOnly
|
|
||||||
case "direct":
|
|
||||||
return StatusVisibilityDirect
|
|
||||||
}
|
|
||||||
|
|
||||||
return StatusVisibilityUnknown
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
type StatusContentType int
|
|
||||||
|
|
||||||
const (
|
|
||||||
StatusContentTypePlainText StatusContentType = iota
|
|
||||||
StatusContentTypeMarkdown
|
|
||||||
StatusContentTypeUnknown
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s StatusContentType) String() string {
|
|
||||||
switch s {
|
|
||||||
case StatusContentTypePlainText:
|
|
||||||
return "text/plain"
|
|
||||||
case StatusContentTypeMarkdown:
|
|
||||||
return "text/markdown"
|
|
||||||
}
|
|
||||||
|
|
||||||
return "unknown"
|
|
||||||
}
|
|
||||||
|
|
||||||
func ParseStatusContentType(value string) StatusContentType {
|
|
||||||
switch value {
|
|
||||||
case "plain", "text/plain":
|
|
||||||
return StatusContentTypePlainText
|
|
||||||
case "markdown", "text/markdown":
|
|
||||||
return StatusContentTypeMarkdown
|
|
||||||
}
|
|
||||||
|
|
||||||
return StatusContentTypeUnknown
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s StatusContentType) MarshalJSON() ([]byte, error) {
|
|
||||||
value := s.String()
|
|
||||||
if value == "unknown" {
|
|
||||||
return nil, fmt.Errorf("%q is not a valid status content type", value)
|
|
||||||
}
|
|
||||||
|
|
||||||
return json.Marshal(value)
|
|
||||||
}
|
|
||||||
|
|
55
internal/model/status_content_type.go
Normal file
55
internal/model/status_content_type.go
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type StatusContentType int
|
||||||
|
|
||||||
|
const (
|
||||||
|
StatusContentTypePlainText StatusContentType = iota
|
||||||
|
StatusContentTypeMarkdown
|
||||||
|
StatusContentTypeUnknown
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
statusContentTypeTextPlainValue = "text/plain"
|
||||||
|
statusContentTypePlainValue = "plain"
|
||||||
|
statusContentTypeTextMarkdownValue = "text/markdown"
|
||||||
|
statusContentTypeMarkdownValue = "markdown"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s StatusContentType) String() string {
|
||||||
|
mapped := map[StatusContentType]string{
|
||||||
|
StatusContentTypeMarkdown: statusContentTypeTextMarkdownValue,
|
||||||
|
StatusContentTypePlainText: statusContentTypeTextPlainValue,
|
||||||
|
}
|
||||||
|
|
||||||
|
output, ok := mapped[s]
|
||||||
|
if !ok {
|
||||||
|
return unknownValue
|
||||||
|
}
|
||||||
|
|
||||||
|
return output
|
||||||
|
}
|
||||||
|
|
||||||
|
func ParseStatusContentType(value string) StatusContentType {
|
||||||
|
switch value {
|
||||||
|
case statusContentTypePlainValue, statusContentTypeTextPlainValue:
|
||||||
|
return StatusContentTypePlainText
|
||||||
|
case statusContentTypeMarkdownValue, statusContentTypeTextMarkdownValue:
|
||||||
|
return StatusContentTypeMarkdown
|
||||||
|
}
|
||||||
|
|
||||||
|
return StatusContentTypeUnknown
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s StatusContentType) MarshalJSON() ([]byte, error) {
|
||||||
|
value := s.String()
|
||||||
|
if value == unknownValue {
|
||||||
|
return nil, fmt.Errorf("%q is not a valid status content type", value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return json.Marshal(value)
|
||||||
|
}
|
83
internal/model/status_visibility.go
Normal file
83
internal/model/status_visibility.go
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type StatusVisibility int
|
||||||
|
|
||||||
|
const (
|
||||||
|
StatusVisibilityPublic StatusVisibility = iota
|
||||||
|
StatusVisibilityPrivate
|
||||||
|
StatusVisibilityUnlisted
|
||||||
|
StatusVisibilityMutualsOnly
|
||||||
|
StatusVisibilityDirect
|
||||||
|
StatusVisibilityUnknown
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
statusVisibilityPublicValue = "public"
|
||||||
|
statusVisibilityPrivateValue = "private"
|
||||||
|
statusVisibilityUnlistedValue = "unlisted"
|
||||||
|
statusVisibilityMutualsOnlyValue = "mutuals_only"
|
||||||
|
statusVisibilityDirectValue = "direct"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s StatusVisibility) String() string {
|
||||||
|
mapped := map[StatusVisibility]string{
|
||||||
|
StatusVisibilityPublic: statusVisibilityPublicValue,
|
||||||
|
StatusVisibilityPrivate: statusVisibilityPrivateValue,
|
||||||
|
StatusVisibilityUnlisted: statusVisibilityUnlistedValue,
|
||||||
|
StatusVisibilityMutualsOnly: statusVisibilityMutualsOnlyValue,
|
||||||
|
StatusVisibilityDirect: statusVisibilityDirectValue,
|
||||||
|
}
|
||||||
|
|
||||||
|
output, ok := mapped[s]
|
||||||
|
if !ok {
|
||||||
|
return unknownValue
|
||||||
|
}
|
||||||
|
|
||||||
|
return output
|
||||||
|
}
|
||||||
|
|
||||||
|
func ParseStatusVisibility(value string) StatusVisibility {
|
||||||
|
mapped := map[string]StatusVisibility{
|
||||||
|
statusVisibilityPublicValue: StatusVisibilityPublic,
|
||||||
|
statusVisibilityPrivateValue: StatusVisibilityPrivate,
|
||||||
|
statusVisibilityUnlistedValue: StatusVisibilityUnlisted,
|
||||||
|
statusVisibilityMutualsOnlyValue: StatusVisibilityMutualsOnly,
|
||||||
|
statusVisibilityDirectValue: StatusVisibilityDirect,
|
||||||
|
}
|
||||||
|
|
||||||
|
output, ok := mapped[value]
|
||||||
|
if !ok {
|
||||||
|
return StatusVisibilityUnknown
|
||||||
|
}
|
||||||
|
|
||||||
|
return output
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s StatusVisibility) MarshalJSON() ([]byte, error) {
|
||||||
|
value := s.String()
|
||||||
|
if value == unknownValue {
|
||||||
|
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