return fmt.Errorf("unsupported schema %d", envelope.Schema)
}
- if !ValidID(envelope.MessageID) {
+ err := validateMetadata(envelope.Metadata)
+ if err != nil {
+ return fmt.Errorf("validate metadata: %w", err)
+ }
+
+ if !isObject(envelope.Payload) {
+ return fmt.Errorf("payload must be a JSON object")
+ }
+
+ return nil
+}
+
+func validateMetadata(metadata Metadata) error {
+ if !ValidID(metadata.MessageID) {
return fmt.Errorf("message ID must be a canonical ULID")
}
- if envelope.CorrelationID != "" && !ValidID(envelope.CorrelationID) {
+ if metadata.CorrelationID != "" && !ValidID(metadata.CorrelationID) {
return fmt.Errorf("correlation ID must be a canonical ULID")
}
- if envelope.CausationID != "" && !ValidID(envelope.CausationID) {
+ if metadata.CausationID != "" && !ValidID(metadata.CausationID) {
return fmt.Errorf("causation ID must be a canonical ULID")
}
- for _, timestamp := range []*time.Time{envelope.SentAt, envelope.ExpiresAt} {
+ for _, timestamp := range []*time.Time{metadata.SentAt, metadata.ExpiresAt} {
if timestamp != nil {
_, offset := timestamp.Zone()
if offset != 0 {
}
}
- if !isObject(envelope.Payload) {
- return fmt.Errorf("payload must be a JSON object")
- }
-
return nil
}