33 lines
776 B
Go
33 lines
776 B
Go
package catalog
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"softbox.local/core/internal/canonicaljson"
|
|
)
|
|
|
|
func parseRestrictedJSON(data []byte) (any, error) {
|
|
value, err := canonicaljson.Parse(data)
|
|
return value, catalogCanonicalError(err)
|
|
}
|
|
|
|
func canonicalJSON(value any) ([]byte, error) {
|
|
encoded, err := canonicaljson.Marshal(value)
|
|
return encoded, catalogCanonicalError(err)
|
|
}
|
|
|
|
func catalogCanonicalError(err error) error {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
switch {
|
|
case errors.Is(err, canonicaljson.ErrDuplicateField):
|
|
return fmt.Errorf("%w: canonical JSON", ErrDuplicateField)
|
|
case errors.Is(err, canonicaljson.ErrUnsupportedNumber):
|
|
return fmt.Errorf("%w: canonical JSON", ErrUnsupportedNumber)
|
|
default:
|
|
return fmt.Errorf("%w: canonical JSON", ErrInvalidDocument)
|
|
}
|
|
}
|