@@ -54,46 +54,41 @@ func NewModifiedFinding(f finding, status FindingStatus, statement, source strin
54
54
55
55
// UnmarshalJSON unmarshals ModifiedFinding given the type and `UnmarshalJSON` functions of struct fields
56
56
func (m * ModifiedFinding ) UnmarshalJSON (data []byte ) error {
57
- raw := struct {
58
- Type FindingType `json:"Type"`
59
- Status FindingStatus `json:"Status "`
60
- Statement string `json:"Statement"`
61
- Source string `json:"Source"`
62
- Finding json. RawMessage `json:"Finding"`
63
- }{}
57
+ type Alias ModifiedFinding
58
+ aux := & struct {
59
+ Finding json. RawMessage `json:"Finding "`
60
+ * Alias
61
+ }{
62
+ Alias : ( * Alias )( m ),
63
+ }
64
64
65
- if err := json .Unmarshal (data , & raw ); err != nil {
65
+ if err := json .Unmarshal (data , & aux ); err != nil {
66
66
return err
67
67
}
68
68
69
- m .Type = raw .Type
70
- m .Status = raw .Status
71
- m .Statement = raw .Statement
72
- m .Source = raw .Source
73
-
74
69
// Select struct by m.Type to avoid errors with Unmarshal
75
70
switch m .Type {
76
71
case FindingTypeVulnerability :
77
72
rawFinding := DetectedVulnerability {}
78
- if err := json .Unmarshal (raw .Finding , & rawFinding ); err != nil {
73
+ if err := json .Unmarshal (aux .Finding , & rawFinding ); err != nil {
79
74
return xerrors .Errorf ("unable to unmarshal %q type: %w" , m .Type , err )
80
75
}
81
76
m .Finding = rawFinding
82
77
case FindingTypeMisconfiguration :
83
78
rawFinding := DetectedMisconfiguration {}
84
- if err := json .Unmarshal (raw .Finding , & rawFinding ); err != nil {
79
+ if err := json .Unmarshal (aux .Finding , & rawFinding ); err != nil {
85
80
return xerrors .Errorf ("unable to unmarshal %q type: %w" , m .Type , err )
86
81
}
87
82
m .Finding = rawFinding
88
83
case FindingTypeSecret :
89
84
rawFinding := DetectedSecret {}
90
- if err := json .Unmarshal (raw .Finding , & rawFinding ); err != nil {
85
+ if err := json .Unmarshal (aux .Finding , & rawFinding ); err != nil {
91
86
return xerrors .Errorf ("unable to unmarshal %q type: %w" , m .Type , err )
92
87
}
93
88
m .Finding = rawFinding
94
89
case FindingTypeLicense :
95
90
rawFinding := DetectedLicense {}
96
- if err := json .Unmarshal (raw .Finding , & rawFinding ); err != nil {
91
+ if err := json .Unmarshal (aux .Finding , & rawFinding ); err != nil {
97
92
return xerrors .Errorf ("unable to unmarshal %q type: %w" , m .Type , err )
98
93
}
99
94
m .Finding = rawFinding
0 commit comments