diff --git a/mocks/operations/stub.go b/mocks/operations/stub.go index f681ddf..4299c8f 100644 --- a/mocks/operations/stub.go +++ b/mocks/operations/stub.go @@ -133,7 +133,7 @@ func (s Stub) Raw() *commonpb.Operation { } func unmarshalNotEmpty(t require.TestingT, message *anypb.Any) proto.Message { - if message == nil || message.MessageIs(&emptypb.Empty{}) { + if message.GetTypeUrl() == "" || message.MessageIs(&emptypb.Empty{}) { return nil } diff --git a/operations/alphaops/operation.go b/operations/alphaops/operation.go index bcc7bc8..0416f63 100644 --- a/operations/alphaops/operation.go +++ b/operations/alphaops/operation.go @@ -224,33 +224,27 @@ func validateAndUnmarshal(operation *v1alpha1.Operation) (unmarshalled, error) { } } - msgs.request, err = unmarshalNotEmpty(operation.GetRequest()) - if err != nil { - errs = errors.Join(errs, fmt.Errorf("request: %w", err)) - } + msgs.request = unmarshalNotEmpty(operation.GetRequest()) + msgs.resource = unmarshalNotEmpty(operation.GetResource()) + msgs.progressData = unmarshalNotEmpty(operation.GetProgressData()) msgs.requestHeaders = http.Header{} for name, header := range operation.GetRequestHeaders() { msgs.requestHeaders[name] = header.GetValues() } - msgs.resource, err = unmarshalNotEmpty(operation.GetResource()) - if err != nil { - errs = errors.Join(errs, fmt.Errorf("resource: %w", err)) - } - - msgs.progressData, err = unmarshalNotEmpty(operation.GetProgressData()) - if err != nil { - errs = errors.Join(errs, fmt.Errorf("progress_data: %w", err)) - } - return msgs, errs } -func unmarshalNotEmpty(operation *anypb.Any) (proto.Message, error) { - if operation == nil || operation.MessageIs(&emptypb.Empty{}) { - return nil, nil //nolint:nilnil // don't want to introduce a sentinel error in private method +func unmarshalNotEmpty(message *anypb.Any) proto.Message { + if message.GetTypeUrl() == "" || message.MessageIs(&emptypb.Empty{}) { + return nil + } + + res, err := message.UnmarshalNew() + if err != nil { + return nil // ignore the error to be compatible with newer services that may send unknown messages inside Any } - return operation.UnmarshalNew() + return res } diff --git a/operations/operation.go b/operations/operation.go index f5870f0..be08262 100644 --- a/operations/operation.go +++ b/operations/operation.go @@ -297,28 +297,26 @@ func validateAndUnmarshal(operation *common.Operation) (unmarshalled, error) { } } - msgs.request, err = unmarshalNotEmpty(operation.GetRequest()) - if err != nil { - errs = errors.Join(errs, fmt.Errorf("request: %w", err)) - } + msgs.request = unmarshalNotEmpty(operation.GetRequest()) + msgs.progressData = unmarshalNotEmpty(operation.GetProgressData()) msgs.requestHeaders = http.Header{} for name, header := range operation.GetRequestHeaders() { msgs.requestHeaders[name] = header.GetValues() } - msgs.progressData, err = unmarshalNotEmpty(operation.GetProgressData()) - if err != nil { - errs = errors.Join(errs, fmt.Errorf("progress_data: %w", err)) - } - return msgs, errs } -func unmarshalNotEmpty(message *anypb.Any) (proto.Message, error) { - if message == nil || message.MessageIs(&emptypb.Empty{}) { - return nil, nil //nolint:nilnil // don't want to introduce a sentinel error in private method +func unmarshalNotEmpty(message *anypb.Any) proto.Message { + if message.GetTypeUrl() == "" || message.MessageIs(&emptypb.Empty{}) { + return nil + } + + res, err := message.UnmarshalNew() + if err != nil { + return nil // ignore the error to be compatible with newer services that may send unknown messages inside Any } - return message.UnmarshalNew() + return res }