diff --git a/pkg/items/item.go b/pkg/items/item.go index 26aaf54f36ea8056413d7ff01be1eed30c97bd26..ee00425f475464830bb99f9e33e612652cd896cd 100644 --- a/pkg/items/item.go +++ b/pkg/items/item.go @@ -296,9 +296,10 @@ func (i *Item) Encode(ctx context.Context, s *schema.Schema) (*Item, error) { func (i *Item) Decode(ctx context.Context, s *schema.Schema, opts ...field.EncodeOption) (*Item, error) { res := *i var err error + opt := field.NewEncodeOptions(opts...) if i.Data != nil { res.Data, err = s.Decode(ctx, i.Data, opts...) - if err != nil { + if err != nil && !opt.GetDataWithErrors { return nil, err } } @@ -310,7 +311,7 @@ func (i *Item) Decode(ctx context.Context, s *schema.Schema, opts ...field.Encod continue } dt, err := schema.Decode(ctx, s, v, opts...) //nolint:govet // err shadows - if err != nil { + if err != nil && !opt.GetDataWithErrors { return nil, err } res.Translations[l] = dt.(map[string]interface{}) diff --git a/pkg/schema/schema.go b/pkg/schema/schema.go index 57dd8f9beee9021ef02f6164c67dc3554ada1963..5088370d45bfa87f666aa23b8a88672c456ec726 100644 --- a/pkg/schema/schema.go +++ b/pkg/schema/schema.go @@ -153,8 +153,9 @@ func (s *Schema) Decode(ctx context.Context, v interface{}, opt ...field.EncodeO return nil, err } + opts := field.NewEncodeOptions(opt...) v, err := Decode(ctx, s, v, opt...) - if err != nil { + if err != nil && !opts.GetDataWithErrors { return nil, err } res, _ := v.(map[string]interface{})