checkpoint: moved InvalidStatusVisibilityError to model package

This commit is contained in:
Dan Anglin 2024-06-02 09:50:22 +01:00
parent d61160f740
commit d660081f3e
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
4 changed files with 31 additions and 19 deletions

View file

@ -168,9 +168,9 @@ func (c *CreateExecutor) createStatus(gtsClient *client.Client) error {
sensitive = preferences.PostingDefaultSensitive sensitive = preferences.PostingDefaultSensitive
} }
parsedVisibility := model.ParseStatusVisibility(visibility) parsedVisibility, err := model.ParseStatusVisibility(visibility)
if parsedVisibility == model.StatusVisibilityUnknown { if err != nil {
return InvalidStatusVisibilityError{Visibility: visibility} return err
} }
parsedContentType := model.ParseStatusContentType(c.contentType) parsedContentType := model.ParseStatusContentType(c.contentType)

View file

@ -59,14 +59,6 @@ func (e EmptyContentError) Error() string {
return message return message
} }
type InvalidStatusVisibilityError struct {
Visibility string
}
func (e InvalidStatusVisibilityError) Error() string {
return "'" + e.Visibility + "' is an invalid status visibility (valid values are public, unlisted, private, mutuals_only and direct)"
}
type InvalidStatusContentTypeError struct { type InvalidStatusContentTypeError struct {
ContentType string ContentType string
} }

View file

@ -77,7 +77,7 @@ func (l *ListRepliesPolicy) UnmarshalJSON(data []byte) error {
) )
if err = json.Unmarshal(data, &value); err != nil { if err = json.Unmarshal(data, &value); err != nil {
return fmt.Errorf("unable to unmarshal the data; %w", err) return fmt.Errorf("unable to decode the JSON data; %w", err)
} }
*l, err = ParseListRepliesPolicy(value) *l, err = ParseListRepliesPolicy(value)

View file

@ -45,7 +45,7 @@ func (s StatusVisibility) String() string {
return output return output
} }
func ParseStatusVisibility(value string) StatusVisibility { func ParseStatusVisibility(value string) (StatusVisibility, error) {
mapped := map[string]StatusVisibility{ mapped := map[string]StatusVisibility{
statusVisibilityPublicValue: StatusVisibilityPublic, statusVisibilityPublicValue: StatusVisibilityPublic,
statusVisibilityPrivateValue: StatusVisibilityPrivate, statusVisibilityPrivateValue: StatusVisibilityPrivate,
@ -56,19 +56,24 @@ func ParseStatusVisibility(value string) StatusVisibility {
output, ok := mapped[value] output, ok := mapped[value]
if !ok { if !ok {
return StatusVisibilityUnknown return StatusVisibilityUnknown, InvalidStatusVisibilityError{Value: value}
} }
return output return output, nil
} }
func (s StatusVisibility) MarshalJSON() ([]byte, error) { func (s StatusVisibility) MarshalJSON() ([]byte, error) {
value := s.String() value := s.String()
if value == unknownValue { if value == unknownValue {
return nil, fmt.Errorf("%q is not a valid status visibility", value) return nil, InvalidStatusVisibilityError{Value: value}
} }
return json.Marshal(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 (s *StatusVisibility) UnmarshalJSON(data []byte) error { func (s *StatusVisibility) UnmarshalJSON(data []byte) error {
@ -78,10 +83,25 @@ func (s *StatusVisibility) UnmarshalJSON(data []byte) error {
) )
if err = json.Unmarshal(data, &value); err != nil { if err = json.Unmarshal(data, &value); err != nil {
return fmt.Errorf("unable to unmarshal the data; %w", err) return fmt.Errorf("unable to decode the JSON data; %w", err)
} }
*s = ParseStatusVisibility(value) // Ignore the error if the visibility from another service is
// not known by enbas. It will be replaced with 'unknown'.
*s, _ = ParseStatusVisibility(value)
return nil return nil
} }
type InvalidStatusVisibilityError struct {
Value string
}
func (e InvalidStatusVisibilityError) Error() string {
return "'" + e.Value + "' is not a valid status visibility value (valid values are " +
statusVisibilityPublicValue + ", " +
statusVisibilityUnlistedValue + ", " +
statusVisibilityPrivateValue + ", " +
statusVisibilityMutualsOnlyValue + ", " +
statusVisibilityDirectValue + ")"
}