@@ -14,8 +14,9 @@ type MetadataCompareResult struct {
1414}
1515
1616type ModuleChanges struct {
17- Calls * ChangesList `json:"calls,omitempty"`
18- Events * ChangesList `json:"events,omitempty"`
17+ Calls * ChangesList `json:"calls,omitempty"`
18+ Events * ChangesList `json:"events,omitempty"`
19+ Storage * ChangesList `json:"storage,omitempty"`
1920}
2021
2122type ChangesList struct {
@@ -56,6 +57,15 @@ func (m *MetadataTag) Compare(dest *MetadataTag) *MetadataCompareResult {
5657 return nil
5758 }
5859
60+ var getStorageByName = func (name string , storageItems []MetadataStorage ) * MetadataStorage {
61+ for _ , item := range storageItems {
62+ if item .Name == name {
63+ return & item
64+ }
65+ }
66+ return nil
67+ }
68+
5969 var buildCallArgs = func (call MetadataCalls ) string {
6070 var args []string
6171 for _ , arg := range call .Args {
@@ -68,6 +78,10 @@ func (m *MetadataTag) Compare(dest *MetadataTag) *MetadataCompareResult {
6878 return fmt .Sprintf ("%s(%s)" , event .Name , strings .Join (event .Args , "," ))
6979 }
7080
81+ var buildStorageArgs = func (moduleName string , storage MetadataStorage ) string {
82+ return fmt .Sprintf ("%s.%s: %s" , moduleName , storage .Name , storage .Type .TypeValue ())
83+ }
84+
7185 var result MetadataCompareResult
7286 result .ModuleChanges = make (map [string ]ModuleChanges )
7387 for _ , module := range m .Modules {
@@ -141,7 +155,30 @@ func (m *MetadataTag) Compare(dest *MetadataTag) *MetadataCompareResult {
141155 if Events .New != nil || Events .Changes != nil {
142156 moduleChanges .Events = & Events
143157 }
144- if (moduleChanges .Calls != nil && (len (moduleChanges .Calls .Changes ) > 0 || len (moduleChanges .Calls .New ) > 0 )) || (moduleChanges .Events != nil && (len (moduleChanges .Events .Changes ) > 0 || len (moduleChanges .Events .New ) > 0 )) {
158+
159+ // check storage
160+ storage := ChangesList {}
161+ for _ , storageItem := range module .Storage {
162+ destStorage := getStorageByName (storageItem .Name , destModule .Storage )
163+ if destStorage == nil {
164+ storage .New = append (storage .New , fmt .Sprintf ("%s.%s" , module .Name , storageItem .Name ))
165+ continue
166+ }
167+
168+ if ! Eq (storageItem .Type .TypeValue (), destStorage .Type .TypeValue ()) {
169+ storage .Changes = append (storage .Changes , CompareChanges {
170+ Prev : buildStorageArgs (module .Name , * destStorage ),
171+ Current : buildStorageArgs (module .Name , storageItem ),
172+ })
173+ }
174+ }
175+ if storage .New != nil || storage .Changes != nil {
176+ moduleChanges .Storage = & storage
177+ }
178+
179+ if (moduleChanges .Calls != nil && (len (moduleChanges .Calls .Changes ) > 0 || len (moduleChanges .Calls .New ) > 0 )) ||
180+ (moduleChanges .Events != nil && (len (moduleChanges .Events .Changes ) > 0 || len (moduleChanges .Events .New ) > 0 )) ||
181+ (moduleChanges .Storage != nil && (len (moduleChanges .Storage .Changes ) > 0 || len (moduleChanges .Storage .New ) > 0 )) {
145182 result .ModuleChanges [module .Name ] = moduleChanges
146183 }
147184
0 commit comments