2019-01-28 22:52:47 +00:00
// VulcanizeDB
2019-03-12 15:46:42 +00:00
// Copyright © 2019 Vulcanize
2019-01-28 22:52:47 +00:00
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
2019-01-31 23:14:42 +00:00
package utils
2019-01-28 22:52:47 +00:00
2019-07-23 14:22:30 +00:00
import "fmt"
2019-01-28 22:52:47 +00:00
type ValueType int
const (
Uint256 ValueType = iota
2019-03-08 17:12:02 +00:00
Uint48
2019-07-18 21:18:20 +00:00
Uint128
2019-01-28 22:52:47 +00:00
Bytes32
Address
2019-07-18 18:30:04 +00:00
PackedSlot
2019-01-28 22:52:47 +00:00
)
2019-02-06 15:38:47 +00:00
type Key string
2019-02-05 22:22:26 +00:00
2019-01-28 22:52:47 +00:00
type StorageValueMetadata struct {
2019-07-19 14:40:02 +00:00
Name string
Keys map [ Key ] string
Type ValueType
2019-07-23 14:22:30 +00:00
PackedNames map [ int ] string //zero indexed position in map => name of packed item
PackedTypes map [ int ] ValueType //zero indexed position in map => type of packed item
2019-01-28 22:52:47 +00:00
}
2019-02-06 15:38:47 +00:00
2019-07-19 14:40:02 +00:00
func GetStorageValueMetadata ( name string , keys map [ Key ] string , valueType ValueType ) StorageValueMetadata {
return getMetadata ( name , keys , valueType , nil , nil )
}
func GetStorageValueMetadataForPackedSlot ( name string , keys map [ Key ] string , valueType ValueType , packedNames map [ int ] string , packedTypes map [ int ] ValueType ) StorageValueMetadata {
return getMetadata ( name , keys , valueType , packedNames , packedTypes )
}
2019-07-23 14:22:30 +00:00
func getMetadata ( name string , keys map [ Key ] string , valueType ValueType , packedNames map [ int ] string , packedTypes map [ int ] ValueType ) StorageValueMetadata {
assertPackedSlotArgs ( valueType , packedNames , packedTypes )
2019-02-06 15:38:47 +00:00
return StorageValueMetadata {
2019-07-19 14:40:02 +00:00
Name : name ,
Keys : keys ,
2019-07-23 14:22:30 +00:00
Type : valueType ,
2019-07-19 14:40:02 +00:00
PackedNames : packedNames ,
PackedTypes : packedTypes ,
2019-02-06 15:38:47 +00:00
}
}
2019-07-23 14:22:30 +00:00
func assertPackedSlotArgs ( valueType ValueType , packedNames map [ int ] string , packedTypes map [ int ] ValueType ) {
if valueType == PackedSlot && ( packedTypes == nil || packedNames == nil ) {
panic ( fmt . Sprintf ( "ValueType is PackedSlot. Expected PackedNames and PackedTypes to not be nil, but got PackedNames = %v and PackedTypes = %v" , packedNames , packedTypes ) )
} else if ( packedNames != nil && packedTypes != nil ) && valueType != PackedSlot {
panic ( fmt . Sprintf ( "PackedNames and PackedTypes passed in. Expected ValueType to equal PackedSlot (%v), but got %v." , PackedSlot , valueType ) )
}
}