@@ -49,95 +49,140 @@ func (s Appearance) String() string {
4949}
5050
5151func (s * Appearance ) Model (chain , format string , verbose bool , extraOpts map [string ]any ) Model {
52- _ = chain
53- _ = format
54- _ = verbose
55- _ = extraOpts
56- var model = map [string ]any {}
57- var order = []string {}
52+ props := & ModelProps {
53+ Chain : chain ,
54+ Format : format ,
55+ Verbose : verbose ,
56+ ExtraOpts : extraOpts ,
57+ }
58+
59+ rawNames := []Labeler {NewLabeler (s .Address , "address" )}
60+ model := s .RawMap (props , rawNames )
61+
62+ calcNames := []Labeler {}
63+ for k , v := range s .CalcMap (props , calcNames ) {
64+ model [k ] = v
65+ }
5866
67+ var order = []string {}
5968 // EXISTING_CODE
6069 if extraOpts ["appearances" ] == true {
61- model = map [string ]any {
62- "blockNumber" : s .BlockNumber ,
63- "transactionIndex" : s .TransactionIndex ,
64- }
6570 order = []string {
6671 "blockNumber" ,
6772 "transactionIndex" ,
6873 }
69-
7074 return Model {
7175 Data : model ,
7276 Order : order ,
7377 }
7478 }
7579
76- model = map [string ]any {
77- "address" : s .Address ,
78- "blockNumber" : s .BlockNumber ,
79- "transactionIndex" : s .TransactionIndex ,
80- }
8180 order = []string {
8281 "address" ,
8382 "blockNumber" ,
8483 "transactionIndex" ,
8584 }
8685
87- if name , loaded , found := labelAddress (extraOpts , s .Address ); found {
88- model ["addressName" ] = name .Name
89- order = append (order , "addressName" )
90- } else if loaded && format != "json" {
91- model ["addressName" ] = ""
92- order = append (order , "addressName" )
86+ for _ , item := range append (rawNames , calcNames ... ) {
87+ key := item .name + "Name"
88+ if _ , exists := model [key ]; exists {
89+ order = append (order , key )
90+ }
9391 }
9492 order = reorderFields (order )
9593
9694 if extraOpts ["uniq" ] == true {
95+ order = append (order , "traceIndex" , "reason" )
96+ if verbose {
97+ order = append (order , "timestamp" , "date" )
98+ }
99+ } else if extraOpts ["export" ] == true && format == "json" {
100+ // Order handled in RawMap/CalcMap
101+ } else {
102+ if verbose {
103+ order = append (order , "traceIndex" , "reason" , "timestamp" , "date" )
104+ }
105+ }
106+ // EXISTING_CODE
107+
108+ return Model {
109+ Data : model ,
110+ Order : order ,
111+ }
112+ }
113+
114+ // RawMap returns a map containing only the raw/base fields for this Appearance.
115+ // This excludes any calculated or derived fields.
116+ func (s * Appearance ) RawMap (p * ModelProps , needed []Labeler ) map [string ]any {
117+ if p .ExtraOpts ["appearances" ] == true {
118+ model := map [string ]any {
119+ "blockNumber" : s .BlockNumber ,
120+ "transactionIndex" : s .TransactionIndex ,
121+ }
122+ return model
123+ }
124+
125+ model := map [string ]any {
126+ "address" : s .Address ,
127+ "blockNumber" : s .BlockNumber ,
128+ "transactionIndex" : s .TransactionIndex ,
129+ }
130+
131+ if p .ExtraOpts ["uniq" ] == true {
97132 if s .TraceIndex > 0 {
98133 model ["traceIndex" ] = s .TraceIndex
99- } else if format != "json" {
134+ } else if p . Format != "json" {
100135 model ["traceIndex" ] = ""
101136 }
102- order = append (order , "traceIndex" )
103137 model ["reason" ] = s .Reason
104- order = append (order , "reason" )
105- if verbose {
138+ if p .Verbose {
106139 model ["timestamp" ] = s .Timestamp
107- order = append (order , "timestamp" )
108- model ["date" ] = s .Date ()
109- order = append (order , "date" )
110140 }
111- } else if extraOpts ["export" ] == true && format == "json" {
112- if verbose {
141+ } else if p . ExtraOpts ["export" ] == true && p . Format == "json" {
142+ if p . Verbose {
113143 if s .Timestamp != base .NOPOSI {
114144 model ["timestamp" ] = s .Timestamp
115145 }
116- model ["date" ] = s .Date ()
117146 }
118147 } else {
119- if verbose {
148+ if p . Verbose {
120149 if s .TraceIndex > 0 {
121150 model ["traceIndex" ] = s .TraceIndex
122- } else if format != "json" {
151+ } else if p . Format != "json" {
123152 model ["traceIndex" ] = ""
124153 }
125- order = append (order , "traceIndex" )
126154 model ["reason" ] = s .Reason
127- order = append (order , "reason" )
128155 model ["timestamp" ] = s .Timestamp
129- order = append (order , "timestamp" )
130- model ["date" ] = s .Date ()
131- order = append (order , "date" )
132156 }
133157 }
134158
135- // EXISTING_CODE
159+ return labelAddresses (p , model , needed )
160+ }
136161
137- return Model {
138- Data : model ,
139- Order : order ,
162+ // CalcMap returns a map containing the calculated/derived fields for this Appearance.
163+ // This includes formatted dates.
164+ func (s * Appearance ) CalcMap (p * ModelProps , needed []Labeler ) map [string ]any {
165+ if p .ExtraOpts ["appearances" ] == true {
166+ return labelAddresses (p , map [string ]any {}, needed ) // No calculated fields for appearances-only mode
140167 }
168+
169+ model := map [string ]any {}
170+
171+ if p .ExtraOpts ["uniq" ] == true {
172+ if p .Verbose {
173+ model ["date" ] = s .Date ()
174+ }
175+ } else if p .ExtraOpts ["export" ] == true && p .Format == "json" {
176+ if p .Verbose {
177+ model ["date" ] = s .Date ()
178+ }
179+ } else {
180+ if p .Verbose {
181+ model ["date" ] = s .Date ()
182+ }
183+ }
184+
185+ return labelAddresses (p , model , needed )
141186}
142187
143188func (s * Appearance ) Date () string {
0 commit comments