ValidateEnvelopeConversation enforces kind-specific container and work fields.
(env Envelope)
| 270 | |
| 271 | // ValidateEnvelopeConversation enforces kind-specific container and work fields. |
| 272 | func ValidateEnvelopeConversation(env Envelope) error { |
| 273 | if env.WorkID != nil { |
| 274 | if err := ValidateWorkID(*env.WorkID); err != nil { |
| 275 | return err |
| 276 | } |
| 277 | } |
| 278 | if isDiscoveryKind(env.Kind) { |
| 279 | return validateDiscoveryEnvelopeOmitsConversation(env) |
| 280 | } |
| 281 | if !isConversationKind(env.Kind) { |
| 282 | return nil |
| 283 | } |
| 284 | if _, err := ConversationRefFromEnvelope(env); err != nil { |
| 285 | return err |
| 286 | } |
| 287 | switch env.Kind { |
| 288 | case KindCapability: |
| 289 | if env.WorkID == nil { |
| 290 | return fmt.Errorf("%w: capability work_id is required", ErrMissingField) |
| 291 | } |
| 292 | case KindReceipt: |
| 293 | if env.WorkID == nil { |
| 294 | return fmt.Errorf("%w: receipt work_id is required", ErrMissingField) |
| 295 | } |
| 296 | case KindTrace: |
| 297 | if env.WorkID == nil { |
| 298 | return fmt.Errorf("%w: trace work_id is required", ErrMissingField) |
| 299 | } |
| 300 | } |
| 301 | return nil |
| 302 | } |
| 303 | |
| 304 | // ConversationRefFromEnvelope returns the validated container reference for a conversation envelope. |
| 305 | func ConversationRefFromEnvelope(env Envelope) (ConversationRef, error) { |
no test coverage detected