| 399 | } |
| 400 | |
| 401 | func ExtractItemImplementationNotes(fieldsJSON string) []ItemImplementationNote { |
| 402 | fieldsMap, ok := parseItemFields(fieldsJSON) |
| 403 | if !ok { |
| 404 | return nil |
| 405 | } |
| 406 | raw, ok := fieldsMap[ItemFieldImplementationNotes] |
| 407 | if !ok { |
| 408 | return nil |
| 409 | } |
| 410 | |
| 411 | payload, err := json.Marshal(raw) |
| 412 | if err != nil { |
| 413 | return nil |
| 414 | } |
| 415 | |
| 416 | var notes []ItemImplementationNote |
| 417 | if err := json.Unmarshal(payload, ¬es); err != nil { |
| 418 | return nil |
| 419 | } |
| 420 | if len(notes) == 0 { |
| 421 | return nil |
| 422 | } |
| 423 | return notes |
| 424 | } |
| 425 | |
| 426 | func ExtractItemDecisionLog(fieldsJSON string) []ItemDecisionLogEntry { |
| 427 | fieldsMap, ok := parseItemFields(fieldsJSON) |