/
assetID.go
70 lines (59 loc) · 1.95 KB
/
assetID.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
Copyright [2019] - [2020], PERSISTENCE TECHNOLOGIES PTE. LTD. and the persistenceSDK contributors
SPDX-License-Identifier: Apache-2.0
*/
package mapper
import (
"bytes"
"github.com/persistenceOne/persistenceSDK/constants"
"github.com/persistenceOne/persistenceSDK/schema/types"
"github.com/persistenceOne/persistenceSDK/schema/types/base"
"strings"
)
type assetID struct {
ClassificationID types.ID `json:"classificationID" valid:"required~required field classificationID missing"`
HashID types.ID `json:"hashID" valid:"required~required field hashID missing"`
}
var _ types.ID = (*assetID)(nil)
func (assetID assetID) Bytes() []byte {
var Bytes []byte
Bytes = append(Bytes, assetID.ClassificationID.Bytes()...)
Bytes = append(Bytes, assetID.HashID.Bytes()...)
return Bytes
}
func (assetID assetID) String() string {
var values []string
values = append(values, assetID.ClassificationID.String())
values = append(values, assetID.HashID.String())
return strings.Join(values, constants.FirstOrderCompositeIDSeparator)
}
func (assetID assetID) Equal(id types.ID) bool {
return bytes.Compare(assetID.Bytes(), id.Bytes()) == 0
}
func readAssetID(assetIDString string) types.ID {
idList := strings.Split(assetIDString, constants.FirstOrderCompositeIDSeparator)
if len(idList) == 2 {
return assetID{
ClassificationID: base.NewID(idList[0]),
HashID: base.NewID(idList[1]),
}
}
return assetID{ClassificationID: base.NewID(""), HashID: base.NewID("")}
}
func assetIDFromInterface(id types.ID) assetID {
switch value := id.(type) {
case assetID:
return value
default:
return assetIDFromInterface(readAssetID(id.String()))
}
}
func generateKey(assetID types.ID) []byte {
return append(StoreKeyPrefix, assetIDFromInterface(assetID).Bytes()...)
}
func NewAssetID(classificationID types.ID, immutables types.Immutables) types.ID {
return assetID{
ClassificationID: classificationID,
HashID: immutables.GetHashID(),
}
}