Skip to content

Commit f74a521

Browse files
committed
Adding RawMap/CalcMap to the rest of the types
1 parent f018182 commit f74a521

35 files changed

+1835
-744
lines changed

src/apps/chifra/pkg/types/types_abi.go

Lines changed: 84 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,24 @@ func (s Abi) String() string {
4343
}
4444

4545
func (s *Abi) Model(chain, format string, verbose bool, extraOpts map[string]any) Model {
46-
_ = chain
47-
_ = format
48-
_ = verbose
49-
_ = extraOpts
50-
var model = map[string]any{}
51-
var order = []string{}
46+
props := &ModelProps{
47+
Chain: chain,
48+
Format: format,
49+
Verbose: verbose,
50+
ExtraOpts: extraOpts,
51+
}
52+
53+
rawNames := []Labeler{NewLabeler(s.Address, "address")}
54+
model := s.RawMap(props, rawNames)
55+
56+
calcNames := []Labeler{}
57+
for k, v := range s.CalcMap(props, calcNames) {
58+
model[k] = v
59+
}
5260

61+
var order = []string{}
5362
// EXISTING_CODE
5463
if extraOpts["list"] == true {
55-
model = map[string]any{
56-
"address": s.Address,
57-
"name": s.Name,
58-
"lastModDate": s.LastModDate,
59-
"fileSize": s.FileSize,
60-
"isKnown": s.IsKnown,
61-
}
6264
order = []string{
6365
"address",
6466
"name",
@@ -67,33 +69,66 @@ func (s *Abi) Model(chain, format string, verbose bool, extraOpts map[string]any
6769
"isKnown",
6870
}
6971

72+
if verbose {
73+
if format != "json" {
74+
order = append(order, "isEmpty")
75+
}
76+
order = append(order, "nFunctions", "nEvents")
77+
if format != "json" {
78+
order = append(order, "hasConstructor", "hasFallback")
79+
}
80+
order = append(order, "path")
81+
}
82+
} else {
83+
order = append(order, s.Address.Hex())
84+
for _, item := range append(rawNames, calcNames...) {
85+
key := item.name + "Name"
86+
if _, exists := model[key]; exists {
87+
order = append(order, key)
88+
}
89+
}
90+
}
91+
order = reorderFields(order)
92+
// EXISTING_CODE
93+
94+
return Model{
95+
Data: model,
96+
Order: order,
97+
}
98+
}
99+
100+
// RawMap returns a map containing only the raw/base fields for this Abi.
101+
// This excludes any calculated or derived fields.
102+
func (s *Abi) RawMap(p *ModelProps, needed []Labeler) map[string]any {
103+
model := map[string]any{}
104+
105+
if p.ExtraOpts["list"] == true {
106+
model = map[string]any{
107+
"address": s.Address,
108+
"name": s.Name,
109+
"lastModDate": s.LastModDate,
110+
"fileSize": s.FileSize,
111+
"isKnown": s.IsKnown,
112+
}
113+
70114
if s.IsKnown {
71115
model["address"] = ""
72-
} else {
73-
if name, loaded, found := labelAddress(extraOpts, s.Address); found {
74-
model["name"] = name.Name
75-
} else if loaded {
76-
model["name"] = ""
77-
}
78116
}
79-
if format == "json" && s.Address.IsZero() {
117+
if p.Format == "json" && s.Address.IsZero() {
80118
delete(model, "address")
81119
}
82120

83-
if verbose {
84-
if format == "json" {
121+
if p.Verbose {
122+
if p.Format == "json" {
85123
if s.IsEmpty {
86124
model["isEmpty"] = s.IsEmpty
87125
}
88126
} else {
89127
model["isEmpty"] = s.IsEmpty
90-
order = append(order, "isEmpty")
91128
}
92129
model["nFunctions"] = s.NFunctions
93-
order = append(order, "nFunctions")
94130
model["nEvents"] = s.NEvents
95-
order = append(order, "nEvents")
96-
if format == "json" {
131+
if p.Format == "json" {
97132
if s.HasConstructor {
98133
model["hasConstructor"] = s.HasConstructor
99134
}
@@ -102,32 +137,39 @@ func (s *Abi) Model(chain, format string, verbose bool, extraOpts map[string]any
102137
}
103138
} else {
104139
model["hasConstructor"] = s.HasConstructor
105-
order = append(order, "hasConstructor")
106140
model["hasFallback"] = s.HasFallback
107-
order = append(order, "hasFallback")
108141
}
109142
model["path"] = s.Path
110-
order = append(order, "path")
111143
}
112144

145+
// Handle address labeling for list mode (but not if IsKnown)
146+
if !s.IsKnown {
147+
return labelAddresses(p, model, needed)
148+
}
149+
return model
113150
} else {
114151
model[s.Address.Hex()] = s.Functions
115-
order = append(order, s.Address.Hex())
116-
if name, loaded, found := labelAddress(extraOpts, s.Address); found {
117-
model["addressName"] = name.Name
118-
order = append(order, "addressName")
119-
} else if loaded && format != "json" {
120-
model["addressName"] = ""
121-
order = append(order, "addressName")
122-
}
152+
return labelAddresses(p, model, needed)
123153
}
124-
order = reorderFields(order)
125-
// EXISTING_CODE
154+
}
126155

127-
return Model{
128-
Data: model,
129-
Order: order,
156+
// CalcMap returns a map containing the calculated/derived fields for this Abi.
157+
// This includes name resolution for non-known ABIs.
158+
func (s *Abi) CalcMap(p *ModelProps, needed []Labeler) map[string]any {
159+
model := map[string]any{}
160+
161+
// Only handle name resolution in CalcMap for list mode when not IsKnown
162+
if p.ExtraOpts["list"] == true && !s.IsKnown {
163+
// This handles the special case where we override the name field
164+
if name, loaded, found := labelAddress(p.ExtraOpts, s.Address); found {
165+
model["name"] = name.Name
166+
} else if loaded {
167+
model["name"] = ""
168+
}
169+
return model
130170
}
171+
172+
return labelAddresses(p, model, needed)
131173
}
132174

133175
func (s *Abi) CacheLocations() (string, string, string) {

src/apps/chifra/pkg/types/types_appearance.go

Lines changed: 88 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -49,95 +49,140 @@ func (s Appearance) String() string {
4949
}
5050

5151
func (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

143188
func (s *Appearance) Date() string {

0 commit comments

Comments
 (0)